-
const int* const pa = &a;
const 修饰的是紧跟在后面的东西:
第一个const修饰int,代表指针指向的int值不能变;
第二个const修饰pa,代表指针(也就是地址)不能变。
-
C++允许对一个名字重复声明,但是只能定义一次
-
volatile
告诉编译器,这个变量可以以语言定义以外的方式改变,编译器不能对变量进行强制性的优化
-
register
告诉编译器,如果可能的话,运行时将变量值存储在寄存器中以优化程序
-
extern
当前的声明并非一个定义,对应的定义在程序的其他地方可以找找
-
mutable
只用于类的数据成员,表示一个mutable的数据成员,即使被定义为常量成员,也可以被修改
-
inline
编译器在编译时,尽可能将函数定义的代码内插到程序中用到该函数的地方
注:一般inline函数,文件声明和定义放在一起,都放在头文件中
-
只有一种情况例外,否则任何一个实体的类型都是在编译期确定
这种例外情况:
在一个继承树中,通过一个指针或者引用访问的对象的类型
-
C++的类型
-
整型
一共6种
short int long unsigned short unsigned int unsigned long
注:
(1) 到底多长不一定,看具体的机器类型,只能说每种至少16/32/64位
(2) size_t 类型是其中一个无符号整型的替代名,保证在该类型的变量中可以容纳的最大的对象(包括数组)的尺寸
-
整型直接量
(1) 组成部分:基数标志 + 大小标志
基数标志:这个数 123
注:整型直接量没有符号,所以 -3 其实是一个表达式
大小标志:
u -- 无符号 l -- long
(2) 如果一个整型直接量只有基数标志,没有大小标志,那么编译器按照
int > unsigned int > long > unsigned long
的顺序推断它的类型
-
布尔类型
(1) bool
(2) 数字或指针
0 -- 布尔假 其他 -- 布尔真
-
布尔直接量
true false
-
字符类型
(1) char,同样分为有符号和无符号,至少8位
(2) wchar_t 代表宽字符,包含至少16位
-
字符直接量
‘a’
-
字符串常量
“Hello World”
类型为 const char*,编译器自动在末尾加上’\0’
-
浮点类型
(1) 3种类型
float double long double
精度关系:
long double ≥ double ≥ float
(2) float 至少表示十进制下的6位数, double和long double 至少表示十进制下的10位数
(3) -3.1 是一个表达式,而非一个浮点数常量
(4) 默认double,加f代表float,加l代表long double
-
常量表达式
(1) 一个常量表达式中只能包含四种
1. 直接量 2. 枚举类型量 3. 常量变量 4. **整型**的static数据成员(这个static成员要求用另一个常量表达式或者sizeof赋值)
(2) 一个常量表达式的值,在编译时已经确定
-
类型转换
(1) 原则:转换倾向于保留原有信息,而不是丢失信息
(2) 从一个较大的带符号类型,向一个较小的类型转换,转换值由具体的系统进行定义
(3) 算术运算中的类型转换
1° 操作数中只要有浮点数,结果一定是浮点数,结果精度取操作数中精度最大的类型 2° 操作数中有unsigned long,结果一定是unsigned long 3° 如果操作数中一个是unsigned非long,另一个是long int,结果取决于系统环境中long int和unsigned int哪个大,哪个大取哪个 4° 操作数中有long int且不满足3°,结果就是long int 5° 两个操作数都是int或者更短的类型,结果一定是int类型 ---> 任何算术运算都无法得到short和char
-
枚举类型
(1) 示例
enum Poker { Heart = 1, Blade = 2, Diamond = 3, };
(2) 用来初始化的值必须是整数类型
-
-
表达式
-
运算符重载
(1) 运算符重载不会改变运算符的优先权
(2) 不能重载对C++内建类型操作数进行运算的内建运算符
-
左值
一个有地址的非临时对象,可以放在表达式的左边
::m --- 全局作用域内的变量m
-
附录A_C++语法细节
最新推荐文章于 2024-07-10 17:19:32 发布