zoukankan      html  css  js  c++  java
  • 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 中设置此编译器选项

    1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

    2. 选择“配置属性” > “C/C++” > “命令行”属性页。

    3. 将 /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 *).

    四、左值右值区分

    1、概念区分

    • 左值:表达式结束后依然存在的对象
    • 右值:表达式结束后就不存在的临时对象

    2、判断左值和右值

    • 能对表达式取地址的是左值,否则就是右值
    • 左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能出现在等号右边的变量(或表达式). 
    作者:灼光
    本博客文章大多为原创,转载请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Python中webbrowser的用法
    python爬虫笔记
    PHP yii2.0框架利用mpdf导出pdf
    PyQt5中QTableWidget设置列宽大小的几种方式
    看linux正在运行的服务用哪个命令?
    查看SELinux状态
    查看SMB服务器用户
    centOS7 下安装smb服务器
    (samba启动失败)smb.service: main process exited, code=exited, status=1/FAILURE
    Linux 操作日志
  • 原文地址:https://www.cnblogs.com/laiyingpeng/p/11304372.html
Copyright © 2011-2022 走看看