C++ 11新特性之语法甜点2
概述
C++ 11中引入了许多简化编程工作的语法上的新特性,我们暂且美其名曰:“语法甜点”。书接上篇,我们继续介绍C++ 11中的这些“语法甜点”,也是第二篇关于“语法甜点”的文章。
(图片来源网络,侵删)
语法甜点6:模板右边双括号
在C++ 03中,vector vctTemp是一个非法的表达式,编译器会认为右边的>>是一个移位操作符,因此必须修改为:vector vctTemp,即在右边的两个>中间添加一个空格。在C++ 11中,这将不再是一个问题,编译器将能够识别出右边的双括号是两个模板参数列表的结尾。
语法甜点7:static_assert
静态断言static_assert由一个常量表达式和一个字符串构成。在编译期间,将计算常量表达式的值;如果为false,字符串将作为错误信息输出。
#include using namespace std; int main() { char cNumber = 66; static_assert(sizeof(cNumber) == 4, "not an interger"); return 0; }
语法甜点8:初始化列表
在引入C++ 11之前,只有数组能使用初始化列表。在C++ 11中,vector、list等各种容器以及string都可以使用初始化列表了。初始化列表对应的类为initializer_list,vector、list等各种容器以及string之所以可以使用初始化列表,是因为它们重载了参数类型为initializer_list的构造函数(称为初始化列表构造函数)和赋值函数(称为初始化列表赋值函数)。
#include #include #include using namespace std; void Print(const initializer_list &ilData) { for (auto a : ilData) { cout {"92001", "Tom"}, {"92002", "Mike"}}; string strText{"Hello CSDN"}; Print({}); Print({1, 2}); Print({1, 2, 3, 4, 5}); return 0; }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。