在C++17中的部分新特性

C++17已经发布了有一些时候,并且很多的编译器已经完成了对C++17的支持,那对于C++17中的新特性,我也好奇的玩了一些,其中的几个新特性特别吸引我的注意。

if-init

Grammar

if ( init-statement condition )

init-statement 可以是:

表达式语句(可以是空语句,仅;)

声明语句

Thinking

if-init 这个 feature 尝试着让我们的代码更可读和干净,并且可以帮助我们更好的控制对象的生命周期。在从前的 if 语句中,我们经常会做类似的事情:

void foo(int a) {

au......

Const Reference of Pointer

问题起源:

在子类中实现一个模板父类的纯虚函数的时候,不能正确的通过编译。

template<typename T>

struct Fuck {

virtual void shit(const T&) = 0;

}

shit函数接受一个常量引用,当我们使用一个指针类型(A*)来实例化这个模板类的时候,函数shit的类型就应该是:

void shit(const T&) = 0; <value T = A*>

当我尝试用下面这样的表示来实现这个函数的时候发生了编译错误:

struct FuckImpl : Fuck<A*......

编译时期常量数组及常用操作

文中所有的代码均遵循C++11的标准并编译通过。

const_array 的实现

在 C++11 标准中的使用constexpr修饰的函数的要求比较严格,只允许在函数体内有一个return语句。那么在这样的限制下,很多的表达式就只能使用递归来完成。

#include <iostream>

#include <cstddef>

template<typename T>

using Invoke = typename T::type;

template<size_t...>

struct index_sequence {

using......