标签:依赖 说明 express ESS 不能 ring 必须 指令 赋值
1.const关键字可以定义一种变量,它的值不能被改变。因为const对象一旦创建后其值就不能被改变,所以const对象必须初始化。
2. 默认情况下,const对象被设为仅在文件中有效。如果想在多个文件中共享const对象,必须在变量的定义之前添加extern关键字。
3. 顶层const:表示指针本身是个常量,底层const表示指针所指的对象是一个常量。
- int i=0;
- int *const p1 = &i; // 不能改变p1的值,这是一个顶层const
- const int ci = 42; // 不能改变ci的值,这是一个顶层const
- const int *p2 = ci; // 允许改变p2的值,这是一个底层const
- const int *const p3 = p2; // 靠右的const是顶层const,靠左的是底层const
- const int &r = ci; //用于声明引用的const都是底层const
4. 常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。
5. 声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。一般来说,如果你认定变量时一个常量表达式,就把它声明为constexpr类型。
- constexpr int mf = 20; // 20是常量表达式
6. 有两种方法可以定义类型别名。传统的方法是使用关键字typedef:
- typedef int INT;
新标准规定了一种新的方法,使用别名声明(alias declaration)来定义类型的别名:
- using SI = Sales_item; // SI 是Sales_item的同义词
7. auto类型说明符让编译器通过初始值来推算变量的类型。显然,auto定义的变量必须有初始值。
- auto item = val1 + val2; // item初始化为val1和val2相加的结果,如果两个变量的类型是double,则item的类型就是double
8. decltype类型指示符作用是选择并返回操作数的数据类型,在此过程中,编译器分析表达式并得到它的类型,却不计算结果。
- const int ci = 0, & cj = ci;
- decltype(cj) x = 0; // x的类型是const int
- decltype(cj) y = x; //y的类型是const int&,y绑定到变量x
- decltype(cj) z; // 错误:z是一个引用,必须初始化
9. 如果decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型;如果给变量加上了一层或多层括号,编译器就会把它当成是一个表达式。变量是一种可以作为赋值语句左值的特殊表达式,所以这样的decltype就会得到引用类型:
// decltype的表达式如果 是加上了括号的变量(双层括号),结果将必是引用。而decltype(variable)结果只有当variable本身就是一个引用时才是引用。
- decltype((i)) d; //错误:d是int&,必须初始化
- decltype(i) e; // 正确:e是一个(未初始化的)int
10. 类体(结构体)右侧表示结束的花括号后必须写一个分号,这是因为类体后面可以紧跟变量名以示对该类型对象的定义,所以分号比不可少:
- struct Sales{ }(name);
11. C++程序还会用到的一项预处理功能是头文件保护符,头文件保护符依赖于预处理变量。与处理变量有两种状态:已定义和未定义。#define 指令把一个名字设定为预处理变量,另外两个指令则分别检查某个指定的预处理变量是否已经定义:#ifdef 当且仅当变量已定义时为真,#ifndef 当且仅当变量未定义时为真。一旦检测结果为真,则执行后续操作直至遇到#endif 指令为止。
使用这些功能就能有效的防止重复包含的发生:
#ifndef SALES_DATA.h #define SALES_DATA.h //为了避免与程序中的其他实体发生名字冲突,一般把预处理变量的名字全部大写 #include <string> struct { std::string bookNo; unsigned units_sold = 0; double revenue = 0.0 ; }; #endif
第一次包含Sales_data.h时,#ifdef的检测结果为真,预处理器将顺序执行后面的操作直到遇到#endif为止。此时,预处理变量Sales_data变为已定义,且Sales_data.h也会被拷贝到程序中。后面再一次包含Sales_data.h 时,则#ifndef的检测结果为假,编译器将忽略#ifndef到#endif之间的部分。
标签:依赖 说明 express ESS 不能 ring 必须 指令 赋值
原文地址:https://www.cnblogs.com/yanhualianye/p/14694922.html