zoukankan      html  css  js  c++  java
  • c++11新特性注意点

    本文记录下一些c++11新特性需要注意的方面,供日后参考

     一、auto

    auto可以当成“占位符”,根据右边的类型自动推导出变量的类型。需要注意的是

    1. auto不能解决溢出的问题。
    2. auto可以与指针和引用结合使用。和指针结合使用时,auto或者auto * 都可以,和引用结合使用时必须写成auto &
    3. auto “带不走”cv限制符 const ,volatile属性,需要cv属性时声明const auto,volatile auto
    4. auto声明多个变量时,以第一个变量推导出的类型为准
    5. auto不声明为指针会引用时,推导结果会抛弃引用和cv属性;声明为指针或引用时,会保留cv属性
    unsigned int a = 2^32-1;
    unsigned int b = 1;
    auto c = a + b; //照样溢出,不会自动转型,c的类型还是unsigned int
    
    int a = 0;
    int *pa = &a;
    auto *pa1 = &a; // 等价 auto pa1 = &a;
    auto &ra = a;

    auto x = 1, y = 2; //int x,y
    const auto *m = &x, n = 1; //auto占位int,可以编译通过
    auto i = 1, j = 3.14f; //auto是int,j精度损失,编译失败

    以下几种情况避免使用auto

    1.  做函数的形参
    2. 结构体中,仅static const int/static const enum可以用auto
    3. 声明auto数组
    4. 实例化模板时用auto做模板参数

    二、decltype

    编译期推导,并不会计算表达式值。类型推导规则decltype(e)

    1. 如果e是一个没有带括号的标记符表达式或者类成员访问表达式,那么decltype(e)就是e所命名的实体的类型。此外,如果e是一个被重载的函数,则会导致编译时错误
    2. 否则,假设e的类型是T,如果e是一个将亡值,那么decltype(e)为T&&
    3. 否则,假设e的类型是T,如果e是一个左值,则decltype(e)为T&
    4. 否则,假设e的类型是T,则decltype(e)为T
  • 相关阅读:
    Drupal Coder 模块远程命令执行分析(SA-CONTRIB-2016-039)
    Python 实现 ZoomEye API SDK
    程序员互动联盟第一届编码大赛第二题解题分享
    python中各进制之间的转换
    记一次ctf比赛解密题的解决(可逆加密基本破解之暴力破解)
    使用JsonConfig控制JSON lib序列化
    openMRS项目
    Harmonic Number(调和级数+欧拉常数)
    Pairs Forming LCM(素因子分解)
    Uva 11395 Sigma Function (因子和)
  • 原文地址:https://www.cnblogs.com/pusidun/p/11223392.html
Copyright © 2011-2022 走看看