如果我想要一个指向另一个变量的指针,我可以通过使用 & 为变量提供地址来实现它。
int foo = 10;
int *bar = &foo;
现在,如果我遵循与上述相同的逻辑,而是创建一个引用类型。
int foo = 10;
int &bar = &foo;
我认为这应该有效,但事实并非如此。为什么?
如果我想要一个指向另一个变量的指针,我可以通过使用 & 为变量提供地址来实现它。
int foo = 10;
int *bar = &foo;
现在,如果我遵循与上述相同的逻辑,而是创建一个引用类型。
int foo = 10;
int &bar = &foo;
我认为这应该有效,但事实并非如此。为什么?
因为指针和引用不是一回事。您可以将引用视为仅意味着“另一个名称”或“别名”。
换句话说,bar
只是foo
您示例中的另一个名称。当你这样做时int &bar = foo;
,你想bar
成为另一个名字foo
,你不想分配给 to 的foo
地址bar
。但是,指针存储它指向的对象的地址,因此对于指针,您需要 address-of 运算符来获取地址foo
并将其分配给bar
指针。
它不起作用,因为引用需要使用与引用相同的类型进行初始化。在这种情况下:
int foo = 10;
int &bar = foo;
当您尝试以这种方式初始化它时:
int &bar = &foo;
您正在尝试使用指向 int 的指针初始化 int 引用。类型不匹配。
引用与指针不同,尽管编译器可能会将其实现为引擎盖下的指针。参考文献基本上说“当我提到 bar 时,我真的在谈论 foo”。