在C ++中初始化引用

时间:2012-07-20 22:45:30

标签: c++

如果我想要一个指向另一个变量的指针,我可以通过给&变量赋予地址来实现。

int foo = 10;
int *bar = &foo;

现在如果我遵循与上面相同的逻辑,而是创建一个引用类型。

int foo = 10;
int &bar = &foo; 

我认为这应该有效,但事实并非如此。为什么呢?

3 个答案:

答案 0 :(得分:4)

语法是

int &bar = foo;

请参阅wikipedia

答案 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”。