我正在阅读C ++入门书,我发现了以下两个陈述:
由于引用不是对象,我们可能无法定义对引用的引用。
因为引用不是对象,所以它们没有地址。因此,我们可能没有定义指向引用的指针。
但是,当我运行以下代码时,我没有收到错误或警告,我的代码运行良好:
int main(int argc, const char * argv[]) {
// insert code here...
int i, &ri = i;
int &bi = ri;
std::cout << "The address of ri is " << &ri << std::endl;
std::cout << "The address of bi is " << &bi << std::endl;
int* p = &ri;
std::cout << p << std::endl;
return 0;
}
输出:
The address of ri is 0x7fff5fbff76
The address of bi is 0x7fff5fbff76c
0x7fff5fbff76c
知道为什么会有效吗?
感谢。
答案 0 :(得分:0)
他们的意思是您不能拥有int& &
类型。
在您的代码中,引用ri
指的是对象i
。
当你执行int &bi = ri;
时,你没有引用引用,但是你再次引用同一个对象。
答案 1 :(得分:0)
在上面的代码中,您没有创建任何类型的变量来保存引用地址。
在代码中保存引用地址的逻辑含义为:
int&amp; bi =&amp; ri;
但是此代码会出错。
因此你的代码正在运行,因为你创建了变量,所有变量都包含变量i的地址。
答案 2 :(得分:0)
int&amp; bi = ri;
这意味着“将参考bi设置为等于参考ri”。与分配任何其他简单类型的方式相同。
int * p =&amp; ri;
聪明的编译器将“引用地址”替换为“引用引用的对象的地址”。