【问题标题】:C++ reference variable clarificationC++ 引用变量说明
【发布时间】:2010-06-07 11:19:05
【问题描述】:

我想大多数人会再次对这个话题感到惊讶,但是我指的是“Stephen C. Dewhurst”撰写的《C++ 常识:基本中级编程》一书。

在书中,他引用了一个特定的句子(在第 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 指代ij 变量。 而且代码运行良好。

我错过了什么吗?我已经使用 SUSE10 64bit linux 来测试我的示例程序。

提前感谢您的意见。

【问题讨论】:

    标签: c++ variables reference


    【解决方案1】:

    您没有将ref 绑定到另一个对象:当您执行ref = k 时,就好像您执行了i = k,它只是重新分配了i 的值。换句话说,你打电话给ioperator=

    这里有一些东西可以更好地展示这个想法:

    #include <iostream>
    
    int main()
    {
        std::ostream& stream = std::cout;
        stream = std::cerr; // fails to compile!  Cannot access ostream::operator=
        return 0;
    }
    

    【讨论】:

      【解决方案2】:

      ref = k 行并没有改变ref 所指的内容,它是将k 的值分配给ref 的值。如果您随后打印i,您会发现i 现在也是2000。

      【讨论】:

        【解决方案3】:
        #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";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-07
          • 2016-05-23
          • 1970-01-01
          相关资源
          最近更新 更多