c++是一门静态类型语言,在编译时会做类型检查
左值: 可以出现在赋值语句左边或右边
右值: 可以出现在赋值语句的右边,不能出现在左边
赋值初始化,直接初始化差别很微妙的(13章):
复制初始化(copy-initialization) 用等号(=) int a = 10;
直接初始化(direct-initialization) 放在括号中 int a(10); 更灵活,效率高 p42
一般来讲,赋值初始化,右侧会涉及到构造初始函数,之后在赋值给左侧(以类为鉴)
类一般有默认够着函数,以string类为例,string类定义了默认的够着函数来初始化string变量为空字符串,即没有字符的字符串
std::string empty;
变量的定义:声明+分配存储空间 int a; or int a = 10; or int a(0)
变量的声明:声明变量的类型和名字, 可以通过external关键字声明变量名而不定义它,external int a;程序的变量可以声明多次,但只能定义一次,如果external后有初始化,则是定义。external int a = 10;(必须在函数外部)
浮点数不能用等号==来判断,一般会有误差,因此要用做差(0.00001)来判断
const 变量定义了就不可以修改,因此定义时必须初始化,(声明不初始化)const int a = 10; 并且const 变量还是左值但不可修改,声明extern const int a;
注意:const变量是定义该对象文件的局部变量不特殊声明其他文件不可以访问,如若要其他文件访问需要做特殊修饰extern。
file1 -- extern const int a = ...;
file2 -- extern const int a;
引用:
引用就是别名,语法 int val = 10; int &a = val;可以对引用修改 a= 20;
一行可以有多个引用定义,但是要在每个引用前加一个&
const引用:
"const引用"就是指向const对象的引用, "非const引用"是指向非const的引用
const变量的引用要用const引用,普通引用不可以引用const变量。
const引用可以初始化为不同类型的对象或是初始化为右值
int i = 42;
const int & r =42;
int & ival = 42;//错误因为const引用(42)是只读的,不可修改
const int & r2 = r + i;
对非const引用是非法的,以以下为例解释
double dval = 3.14;
const int & ival = dval;
编译器会将代码改为:
int temp = dval;
const int & ival = temp;
因此修改dval并没有影响ival
typedef:定义变量的同义词
隐藏特定类型的实现,强调类型的目的
简化复杂类型的实现,抑郁理解
允许一个类型用于多个目的,同时使得每次使用该类型的目的明确
枚举
枚举的值可以不唯一,只要求后边的比前边的大1,可以在不同位置赋值初始化
#include
仅包含头文件这一变量 <>(编译器会把里边的头文件作为标准头文件)
预处理变量,#define XXXX