所以最近我重新访问了有关类型声明的引用,但我不太理解它们。
考虑此伪代码:
int ia = 10;
int& ref = ia;
现在,我的问题是:
int& ref
如何在内部工作,这是否意味着ref
的地址被分配了ia
的地址,因此等于&ia
,如果不是,那么编译器在看到这些引用时会做什么? 您完全不必考虑地址。 ref
只是ia
的别称,或者换句话说,ref
是ia
的别名。只是为您的代码添加语法糖。
在这种情况下,编译器根本不需要做很多事情,只需跟踪代码何时包含ref
,将其替换为ia
。
C ++标准未指定编译器应如何实现引用。许多人认为它们只是别名,但实际上,它们实际上是作为const
指针实现的。
C ++引用是幕后的const
指针。因此:
int ia = 10;
int& ref = ia;
ref++; // ia is 11 now
可能由编译器转换为:
int ia = 10;
int* const ref = ia;
(*ref)++; // ia is 11 now
它们需要初始化,因为必须初始化常量。