zoukankan      html  css  js  c++  java
  • C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     using cullptr = const unsigned long long *; //C++11新变量类型long long;constexpr unsigned long long * 为非法
     7     typedef wchar_t * wchptr;
     8     /*
     9     使用using或typedef声明的类型别名的变量实例初始化时,不同类型变量不可使用“,”写在同一行
    10     如://cullptr c{0}, wchptr w{0}为非法
    11     */
    12     cullptr cp1{ (nullptr) }; //C++11新特性nullptr空指针;cullptr cp{ (nullptr) }, wchptr wp({ NULL }); 为非法,或者会报语法错误
    13     wchptr wp1({ NULL });
    14     cullptr cp2 = (0), 常无符号长整型指针3 = { cp2 }; // cullptr cp4 = ({ 0 }); 为非法
    15     wchptr wp2 = NULL;
    16     wchptr wp3({ 0 }), 宽字符指针4{ (0) };
    17     /*
    18     constexpr仅可用于修饰字面值类型的常量表达式,其修饰的表达式在编译时会进行计算。
    19     字面值类型包括:算数类型、引用、指针(初始化值必须为nullptr或0),
    20     而自定义类型、stream、string均不属于字面值类型。
    21     */
    22     constexpr long double ld{ 0.f };
    23     constexpr cullptr * cp4 = { ((NULL)) }; // “()”初始化时可多层嵌套,但C++11新特性列表初始化符号“{}”不可以嵌套
    24     constexpr wchptr ** wppp(0);
    25 
    26     /*
    27     类型指示符auto,可将表达式赋值给变量,该变量类型将有编译器自动推断完成,其在变量声明时必须初始化。
    28     推断类型时会忽略初始化表达式中顶层的const特性,
    29     而当初始化表达式为指向一个常量的指针是const特性才会保留下来,否则需手动强制声明为const。
    30     当设定auto为引用时,认为是常量引用。
    31     此外,不一定与初始值一样,编译器会适当改变其类型以更加适应初始化规则。
    32     */
    33     const wchar_t w = { ('' )};
    34     // 推断为wchar_t * 类型 推断过程中,wchar_t * = const wchar_t + wchptr,变量w的顶层const特性被舍弃。
    35     auto autovar1 = w + wp1; 
    36     // 推断为const wchar_t类型,变量w的顶层const特性被舍弃。
    37     auto autovar2 = w; 
    38     auto autovar3 = &autovar2; // 推断为wchar_t const * 类型,由于初始化表达式为指向常量值的指针。
    39     auto const autovar4 = autovar3; // 推断为wchar_t const * 类型,关键字顺序不影响推断过程。
    40     auto &autovar5 = w; // 为常量引用
    41 
    42     //一个语句中设定多个变量,所有变量的初始值必须为同一种类型。(auto一行代码中仅会推断一种类型)
    43     auto &autovar6 = autovar5, &autovar7 = autovar5; // 此行只能被推断为cosnt wchar_t &autovar5,若autovar7初始化为其他值,则报错。
    44 
    45     return 0;
    46 }
  • 相关阅读:
    p67 把特定位置的位变成0,进行与运算
    p65 逻辑与运算
    JavaScript对象和初始面向对象
    JavaScript操作DOM对象
    JavaScript操作BOM对象
    JavaScript基础
    DAO模式
    使用ADO.NET访问数据库
    连接查询和分组查询
    模糊查询和聚合函数
  • 原文地址:https://www.cnblogs.com/vico2316/p/6105947.html
Copyright © 2011-2022 走看看