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