语言可用性的强化
常量
-
nullptr
传统c++会把NULL、0解析成一种东西,有些编译器会把NULL定义成((void*)0)或者0。使用NULL调用函数会导致c++重载特性混乱。比如:
void foo(char*),
void foo(int)
foo(NULL)会调用foo(int).
C++11 引入了 nullptr 关键字,专门用来区分空指针、0。而 nullptr 的类型为 nullptr_t,能够隐式的转换为任何指针或成员指针的类型,也能和他们进行相等或者不等的比较。 -
constexpr
C++ 标准中数组的长度必须是一个常量表达式。constexpr关键字可以修饰函数和变量,作用是把编译时就把这些表达式直接优化并植入到程序运行时。
变量及初始化
- if/switch 变量声明强化
c++17后能够在if/switch语句中定义局部变量。比如:if(int i=0;i>=0){…}。 - 初始化列表
c++11加入std::initializer_list。初始化列表可以使用在类构造函数和普通函数上。
void foo(std::initializer_list list) {…}
Foo foo2 {3, 4}; - 结构化绑定
c++11加入。
#include <iostream>
#include <tuple>
std::tuple<int, double, std::string> f() {
return std::make_tuple(1, 2.3, "456");
}