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 }
原文链接: https://www.cnblogs.com/vico2316/p/6105947.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/247041
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!