字符串

  1. 如果需要用字符串字面值常量赋值和初始化一个char * ,应该使用const char *或者auto
char *str = "hello world"; // 将出现弃用警告

数组

  1. 数组的长度必须是一个常量表达式,const常量不是常量表达式。

流程控制

c++17支持将临时变量放到if语句中

std::vector<int> v;
if (const auto iter = std::find(v.begin(), v.end(), 1); iter != v.end()) {
    *iter = 0;
}

if constexpr语句:允许在代码中声明常量表达式的判断条件

template<typename T>
auto print_type_info(const T& t)
{
    if constexpr (std::is_integral<T>::value) {
        return t + 1;
    } else {
        areturn t + 0.1;
    }
}

在编译阶段,实际代码就会被编译为:

int print_type_info(const int& t)
{
    return t + 1;
}

doulbe print_type_info(const double& t)
{
    return t + 0.1;
}