C++2.0新特性(一)——<特性认知、__cplusplus宏开启、Variadi
一、新特性介绍2.0新特性包含了C++11和C++14的部分 1.2 启用测试c++11功能C++ 标准特定版本的支持,/Zc:__cplusplus 编译器选项启用 __cplusplus 预处理器宏以针对最新的 C++ 语言标准支持报告更新的值。?默认情况下,Visual Studio 始终为 __cplusplus 预处理器宏返回值“199711L”,__cplusplus 预处理器宏通常用于报告。?因为很多现有代码需要此宏的值与“199711L”匹配,所以编译器不会更改此宏的值,除非通过使用 /Zc:__cplusplus 编译器选项进行显式选择。?从 Visual Studio 2017 版本 15.7 开始便已提供 /Zc:__cplusplus 选项,该选项在默认情况下处于禁用状态。?在早期版本的 Visual Studio 中,在默认情况下或者在指定了 /Zc:__cplusplus- 的情况下,Visual Studio 针对 __cplusplus 预处理器宏返回值“199711L”。?/permissive-?选项不会启用 /Zc:__cplusplus。 在启用了 /Zc:__cplusplus 选项的情况下,__cplusplus 报告的值取决于?/std?版本切换设置。?下表列出了该宏的可能值:
编译器不支持 C++98、C++03 或 C++11 的标准切换。 若要更精细地检测对编译器工具集的更改,请使用?_MSC_VER?预定义宏。?此内置宏的值会随 Visual Studio 2017 和更高版本中的每个工具集更新而增加。?_MSVC_LANG?预定义宏向标准版本报告 /Zc:__cplusplus 是启用还是禁用状态。?如果启用 /Zc:__cplusplus,则? 在 Visual Studio 中设置此编译器选项
未开启前:
? 开启后:
?1.3 新特性分为语言和标准库两部分二、语言特性之——Variadic Templates表示可变的参数模板,即可以接受1个或多个模板参数 2.1 针对函数的不定模板参数注意语法规定格式,...的位置,他一定是递归处理的,所以一定要有处理递归终止条件的函数 如果想知道不定模板参数的个数,调用sizeof...(args) ?2.1.1 不定模板参数的用法(万用哈希表例子)2.2 针对类的不定模板参数(Tuple元组的实现)三、语言特性之——nullptr标准库允许使用nullptr取代0或者NULL来对指针赋值 //nullptr 是个新关键字。//它被自动转换为各种 pointer 类型,但不会被转换为任何整数类型,//其类型为std::nullptr_t,定义于 <cstddef>.void f(int);void f(void *); f(0); // 调用 f(int).f(NULL); // 如果定义NULL为0,则调用 f(int),否则调用 f(void *).f(nullptr); // 调用 f(void *). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |