zoukankan      html  css  js  c++  java
  • C++新特性 11

    C++11 的新特性

    1 变量和基本类型

    1.1 long long 类型

    扩展精度浮点数,10位有效数字

    1.2 列表初始化

    初始化的几种不同形式,其中用花括号来初始化变量称为列表初始化;

    比如:

    
    int i = 0;
    int i = {0};
    int i{0};
    int i(0);
    
    

    需要注意的是,当用于内置类型的变量时,这种初始化形式有一个重要的特点:如果我们使用初始化且初始值存在丢失信息的风险,则编译器报错;

    例如:

    long double ld = 3.1414141414;
    int a{ld}, b = {ld}; //报错
    int c(ld), d = ld; //正确
    
    cout << "a:" << a << "b:" << b << "c:" << c << "d" << d << endl;
    
    

    运行的时候,a,b则会提示报错信息:error: type 'long double' cannot be narrowed to 'int' in initializer list [-Wc++11-narrowing],这是因为使用long double的值初始化int变量时可能会丢失数据,所以拒绝a和b的初始化请求;虽然c,d虽然没有报错,但是确实丢失了数据;

    [这是为什么?]

    1.3 nullptr 常量

    有几种生成空指针的方法:

    int *p1 = nullptr; // 等价于int *p1 = 0;
    int *p2 = 0;
    int *p3 = NULL; // 等价于int *p3 = 0;
    
    

    在新标准下,建议尽量使用新标准nullptr,nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型,虽然其它的方式也是可以的;

    1.4 constexpr 变量

    将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式;

    声明为constexpr的变量一定是一个常量,而且必须用常量表达式来初始化,比如说下面的情况则是不正确的:

    int t = 10;
    constexpr int q = t + 20;
    cout << "q" << q << endl;
    
    

    需要将t声明为 const 才是正确的;

    一般来说,如果你认定变量是一个常量表达式,那就把它声明为constexpr类型;

    1.5 类型别名声明

    使用类型别名可以使复杂的类型名字变得更简单明了,易于理解和使用;

    现在有两种方法可以用来定义类型别名,一种是 typedef ,另一种则是新标准中的 using

  • 相关阅读:
    tomcat 支持https
    linux环境下jdk 安装以及maven私服搭建
    消息中间间初识
    HDU 5527 Too Rich
    HDU 5534 Partial Tree
    HDU 5543 Pick The Sticks
    HDU 5542 The Battle of Chibi dp+树状数组
    CodeForces 842D Vitya and Strange Lesson
    Codeforces 858D Polycarp's phone book
    HDU 5489 Removed Interval
  • 原文地址:https://www.cnblogs.com/dwx-bzdcxy/p/14733377.html
Copyright © 2011-2022 走看看