C++2.0新特性(一)——<特性认知、__cplusplus宏开启、Variadic Templates >
一、新特性介绍
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 版本切换设置。 下表列出了该宏的可能值:
/Zc:__cplusplus 开关 | /std:c++ 开关 | __cplusplus 值 |
---|---|---|
Zc:__cplusplus | /std:c++14(默认) | 201402L |
Zc:__cplusplus | /std:c++17 | 201703L |
Zc:__cplusplus | /std:c++latest | 201704L |
Zc:__cplusplus-(已禁用) | 任意值 | 199711L |
未指定 | 任意值 | 199711L |
编译器不支持 C++98、C++03 或 C++11 的标准切换。
若要更精细地检测对编译器工具集的更改,请使用 _MSC_VER 预定义宏。 此内置宏的值会随 Visual Studio 2017 和更高版本中的每个工具集更新而增加。 _MSVC_LANG 预定义宏向标准版本报告 /Zc:__cplusplus 是启用还是禁用状态。 如果启用 /Zc:__cplusplus,则 __cplusplus == _MSVC_LANG
。
在 Visual Studio 中设置此编译器选项
-
打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
-
选择“配置属性” > “C/C++” > “命令行”属性页。
-
将 /Zc:__cplusplus 或 /Zc:__cplusplus- 添加到“其他选项:”窗格。
未开启前:
开启后:
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 *).
原文地址:https://www.cnblogs.com/laiyingpeng/p/11304372.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ThinkPHP3.2框架操作Redis的方法分析
- python实现图像外边界跟踪操作
- php微信分享到朋友圈、QQ、朋友、微博
- Numpy 多维数据数组的实现
- 使用matplotlib的pyplot模块绘图的实现示例
- PHP get_html_translation_table()函数用法讲解
- Laravel中10个有用的用法小结
- PHP7 echo和print语句实例用法
- python上selenium的弹框操作实现
- php分享朋友圈的实现代码
- Laravel框架Request、Response及Session操作示例
- 利用scikitlearn画ROC曲线实例
- 小程序微信退款功能实现方法详解【基于thinkPHP】
- PHP回调函数简单用法示例
- PHP explode()函数用法讲解