【问题标题】:Modification of a constant reference修改常量引用
【发布时间】:2015-01-31 22:33:26
【问题描述】:

这是我和我的同事正在讨论的一个理论问题。我很快就会自己尝试一下,但我认为这对新手来说是一个有趣的话题。

假设有一个基类“VEHICLE”和派生类,如“CAR”和“TRUCK”... (其中“VEHICLE”是一个抽象类,不能实例化)。

到目前为止一切顺利。现在您创建了一辆名为 A 的汽车:car A;
以及对名为 B 的 A 的 const 引用:const car& B = A;

假设“CAR”类有一个名为broken_door的函数。我现在的问题如下:当我调用 A.broken_door(); B 会发生什么,因为 B 是常量和引用对象?

提前谢谢你

【问题讨论】:

  • B 是一个常量reference,因此等价于AB 实际上会发生什么?它仍然是一个参考
  • B 将继续引用A。这就是引用的作用。参考别的东西。

标签: c++ constants ref


【解决方案1】:

“B”和“A”是同一事物的不同名称。
它们之间的区别在于,如果你想改变它,你不能将它称为“B”。
(“const 引用”不是对不会更改的对象的引用,而是禁止更改的引用。)

一个稍有缺陷的类比:您可以使用名称“molbdnilo”作为我的“常量引用”(因为它指的是我,但您没有能力修改我)。
不过,如果我更改了我的 stackoverflow 配置文件,您仍然会看到更改。

【讨论】:

    【解决方案2】:

    B 不会发生任何事情。它将继续引用A,这将被修改。

    const 表示B 不能用于修改它所引用的对象。这并不意味着该对象不能通过其他方式改变。

    【讨论】:

      【解决方案3】:

      B 只是对A 的引用,它为同一对象提供了不同的名称。

      const car& B = A; 不会神奇地将A 变成一个不能修改的常量对象,它只是意味着你不能通过B 修改它

      您仍然可以通过直接修改A 或通过另一个(非常量)指针或引用来更改对象。

      【讨论】:

        猜你喜欢
        • 2020-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-15
        • 2015-10-01
        • 1970-01-01
        • 2018-01-24
        • 1970-01-01
        相关资源
        最近更新 更多