C++ 左值引用

C++ lvalue references

所以最近我重新访问了有关类型声明的参考资料,但我不太理解它们。

考虑这个虚拟代码:

int ia = 10;
int& ref = ia;

现在,我的问题是:

  1. 这些int& ref在内部是如何工作的,这是否意味着ref的地址被分配给ia的地址,如果不是,则等于&ia那么编译器在看到这些引用后会做什么呢?
  2. 为什么这些 引用 没有在 C++ 程序中编译?

您根本不必考虑地址。 ref 只是 ia 的别名,或者换句话说,refia 的别名。只是代码的语法糖。

这种情况下的编译器根本不需要做太多,只需跟踪代码何时包含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

它们需要初始化,因为常量必须被初始化。