【问题标题】:Does reference changes the state of the referent引用是否改变了引用的状态
【发布时间】:2011-05-20 20:37:23
【问题描述】:

当我阅读时

---引用不是指针它是对象本身,引用是一个实体,它是另一个对象的别名。

---引用永远不能代表NULL

---引用变量允许两个变量名寻址同一个内存位置:

---以后不能引用不同的对象

---引用不是变量,因为变量仅由对象的声明引入。对象是一个存储区域,在 C++ 中,引用不会(必然)占用任何存储空间。

现在下面的行将变量整数转换为常量整数

const Array& ref = integers

此外,我还阅读了this 还说您可以更改所指对象的状态。

请建议/澄清。

【问题讨论】:

  • 您缺少ref 的类型。 :)
  • 对不起Xeo,谢谢指出
  • 为了清楚起见,您并没有更改数组的 state。您只是更改了引用所指的 type
  • 是的,它明确表明引用是变量。谢谢

标签: c++ reference


【解决方案1】:

不,它不会转换 integers。您现在只有 integers 的别名,您无法通过该别名进行更改。您仍然可以通过原名更改integers

int i = 0;
int const& i_ref = i;
i = 5;
cout << i_ref; // outputs 5

上面的例子还展示了如何改变裁判的状态。

【讨论】:

  • 我正在写一个小代码,如果你有时间你可以看看this
  • @munish:我认为您需要了解常量成员函数的工作原理。允许在常量对象上调用它们,而非常量对象则不允许。这在将动态数组作为const Array&amp; const-reference 传递时特别有用,因为这样可以调用您的operator[](const 版本)。
  • hmm.. 我知道 Xeo,但我仍然很困惑.. 无论如何我现在明白了,我的问题只是这个问题(在 stackoverflow 上)......我明白了。再次感谢..
【解决方案2】:

您不能更改 const 引用的状态。除此之外,你在里面提到的一切都是真的。

例如:

const int& ref = integers;
ref = 5;

将无法编译。在哪里

int& ref = integers;
ref = 5;

将编译并将存储在整数中的值更改为 5。

此外,一个 const 引用意味着您不能使用该引用更改它所引用的对象的值。您仍然可以使用原始变量名称对其进行修改。例如:

const int& ref = integers;
integers = 5;
std::cout<<ref<<", "<<integers<<std::endl;

完全有效,会产生:

5, 5     

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-04
    • 2016-04-11
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 2017-06-14
    • 2011-11-03
    • 2013-07-31
    相关资源
    最近更新 更多