我想大多数人会再次对这个话题感到惊讶,但我指的是一本由“Stephen C. Dewhurst”撰写的“C ++ Common Knowledge:Essential Intermediate Programming”一书。
在书中,他引用了一个特定的句子(在第5项中的部分,参考文献是别名,不是指针),如下所示
引用是在引用初始化之前已存在的对象的别名。初始化引用以引用特定对象后,以后不能引用其他对象;引用在其整个生命周期中与其初始化器绑定
任何人都可以解释的上下文“以后不能用来引用不同的对象”
下面的代码对我有用,
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i = 100;
int& ref = i;
cout<<ref<<endl;
int k = 2000;
ref = k;
cout<<ref<<endl;
return 0;
}
我在这里将变量ref
引用到i
和j
变量。
代码工作得很好。
我错过了什么吗?我使用SUSE10 64位linux来测试我的示例程序。
感谢您事先提出的意见。
答案 0 :(得分:11)
您没有将ref
绑定到另一个对象:当您执行ref = k
时,就好像您执行了i = k
一样,只需重新分配 的值> i
。换句话说,您正在调用i
的{{1}}。
这是更好地展示这个想法的东西:
operator=
答案 1 :(得分:5)
第ref = k
行未更改ref
所指的内容,而是将k
的值指定为ref
的值。如果您随后打印i
,您会发现i
现在也是2000。
答案 2 :(得分:2)
#include <iostream>
int main()
{
int i = 100;
int& ref = i;
int k = 2000;
ref = k;
if (&ref == &i) std::cout << "ref is bound to i\n";
if (&ref == &k) std::cout << "ref is bound to k\n";
}