day03_引用的本质、x86_x64汇编
引用的本质
- 引用的本质就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针
- 一个引用占用一个指针的大小
常引用
- 引用可以被const修饰,这样就无法通过引用修改数据了,可以称为常引用
- const必须写在&符号的左边,才能算是常引用
- const引用的特点
- 可以指向临时数据(常量、表达式、函数返回值等)
- 可以指向不同类型的数据
- 作为函数参数时(此规则也适用于const指针)
- 可以接受const和非const实参(非const引用,只能接受非const实参)
- 可以跟非const引用构成重载
- 常引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量
int main() {
/*int age = 10;
const int &rAge = age;
age = 30;
cout << "age is " << age << endl;
cout << "rAge is " << rAge << endl;*/
/*int age = 10;
const long &rAge = age;
age = 30;
cout << "age is " << age << endl;
cout << "rAge is " << rAge << endl;*/
/*int array[] = { 1, 2, 3, 4 };
int * const &p = array;*/
//int (&rArray)[4] = array;
int a = 10;
int b = 20;
// (a = b) = 30;
(a > b ? a : b) = 40;
cout << "a is " << a << endl;
cout << "b is " << b << endl;
getchar();
return 0;
}
-
数组的引用
int array[] = { 1, 2, 3, 4 }; int * const &p = array; int (&rArray)[4] = array;
汇编语言
-
mov dest, src
- 将src的内容赋值给dest,类似于dest = src [ 地址值 ] 中括号[ ]里面放的都是内存地址
-
word是2字节,dword是4字节(double word),qword是8字节(quad word)
- call 函数地址
-
调用函数
- lea dest, [ 地址值 ]
- 将地址值赋值给dest,类似于dest = 地址值
-
ret
- 函数返回
-
xor op1, op2
-
将op1和op2异或的结果赋值给op1,类似于op1 = op1 ^ op2
-
add op1, op2
- 类似于op1 = op1 + op2
-
sub op1, op2
- 类似于op1 = op1 - op2
-
inc op
- 自增,类似于op = op + 1
-
dec op
- 自减,类似于op = op – 1
-
jmp 内存地址
- 跳转到某个内存地址去执行代码
- j开头的一般都是跳转,大多数是带条件的跳转,一般跟test、cmp等指令配合使用
权威参考:Intel白皮书 参考