结构体内存对齐
- 什么叫内存对齐:编译器为每个“数据单元”安排在某个合适的位置上。
- 为什么要对齐:更快地将数据提取到寄存器中。如果内存对齐,cpu在寻址时,可以一个总线周期提取到数据;如果数据存储不是内存对齐,那么cpu寻址会耗费更多的总线周期,并且还需要合并寄存器的值。这样导致了寻址耗时。
C++作用域标识符::
用于对与局部变量同名的全局变量进行访问
用于表示类的成员
函数的多态性
静态的多态
在编译时确定函数的入口地址(静态联编)
例如:函数重载
动态的多态
在运行时确定函数的入口地址(动态联编)
例如:虚函数
name managling(改编)与extern “C”
name managling :编译器对重载函数进行函数名称改变
extern “C”: 按照C语言的方式编译
#ifdef __cplusplus
#endif
参数默认值
1. 函数没有声明时,在函数定义中指定形参的默认值
2. 函数既有定义又有声明时,声明指定后,定义后就不能再指定默认值
3. 默认值的定义必须遵守从右到左的顺序,如果某个形参没有默认值,则它左边的参数就不能有默认值
4. 函数调用时,实参与形参按从左到右的顺序进行匹配
5. 带默认形参值的函数的二义性
引用:
- 引用主要作用参数传递、返回值
- 引用的概念:
引用不是变量
引用仅仅只是变量的别名
引用没有自己独立的空间
引用要与它所引用的变量共享空间
对引用所做的改变实际上是对它所引用的变量的改变
引用在定义的时候要进行初始化
引用一经初始化,不能重新指向其他变量 - const引用:指向const对象的引用
const int ival = 1024;
const int& refval = ival; - 引用作为返回值
int& add(int a, int b){
int sum;
num = a + b;
return num;
}
int main(){
int n = add(3, 4);//num 被释放了,但将值赋值给了n
int& n2 = add(5, 6);//num 被被释放了,n2 是num的别名
cout << n << endl; // 值为7
cout << n2 << endl;//值为不确定值
}
引用的另一个作用是用于返回引用的函数
函数返回引用的一个主要目的是可以将函数放在赋值运算符的左边。
注意:不能返回对局部变量的引用
5. 引用与指针的区别:
引用访问一个变量是直接访问,而指针是间接访问。
引用是一个变量的别名,本身不单独分配内存空间,而指针有自己的内存空间。
引用一经初始化不能再引用其他变量,而指针可以。
尽可能使用引用,不得已时使用指针。