【问题标题】:c++ why const& can get const values? [duplicate]c++ 为什么 const& 可以得到 const 值? [复制]
【发布时间】:2014-07-21 11:22:05
【问题描述】:

我明白为什么int& x=1 是非法的(你不能引用常量值),但我不明白为什么const int& x=1 是合法的?你怎么能参考数字“1”?它甚至不是一个定义的变量。

编辑:我阅读了这篇文章中给出的答案:What happens when I assign a temporary int to a const reference in C++? 但有人可以解释他是什么意思“表达式 f(1) 返回的临时值的生命周期将延长其生命周期。这条规则是独一无二的用于常量引用。”?所以文字是否以 int 形式存储在堆栈中?谢谢!

【问题讨论】:

  • 我认为这是 const 引用延长临时对象生命周期的效果。

标签: c++


【解决方案1】:

(你不能引用常量值)

你几乎明白了。

您不能对常量值进行非常量引用。

您可以有一个对常量值的常量引用。 (这会将所述值的生命周期延长到该引用的生命周期)。

【讨论】:

  • 您的答案中缺少的步骤是文字 1 如何变成您可以引用的值。这是真正的问题。
  • @Quentin 啊,好吧,我认为这是重复的,好吧。
【解决方案2】:

允许使用 const 引用的第二种情况,因为这样会创建一个 int 类型的临时对象,并且引用指向这个临时对象。

【讨论】:

    【解决方案3】:

    在这种情况下,你有一个对常量值的常量引用,这在引擎盖下意味着创建一个临时变量的整个生命周期都绑定到引用的生命周期。

    【讨论】:

    • 默认情况下文字不会存储在任何地方,因此您的答案的第二部分是错误的。
    • 在这种情况下的文字是一个临时变量,它的生命周期绑定到引用的生命周期。我会在答案中澄清这一点。
    • 这就是 OP 的实际答案 ;)
    【解决方案4】:

    这是一个 C++ 语言功能。 Click here 方便解释。

    编辑

    来自链接:

    通常,临时对象只持续到完整的结束 它出现的表达式。但是,C++ 故意指定 将临时对象绑定到堆栈上对 const 的引用 将临时对象的生命周期延长到临时对象的生命周期 引用自身,从而避免了其他情况下常见的情况 悬空引用错误

    【讨论】:

      【解决方案5】:

      因为 C++ 是这么说的。语言是这样定义的。语言创建者决定允许它。

      【讨论】:

        猜你喜欢
        • 2019-02-01
        • 2018-10-24
        • 2020-01-23
        • 2020-07-11
        • 1970-01-01
        • 1970-01-01
        • 2020-06-10
        • 1970-01-01
        • 2016-06-19
        相关资源
        最近更新 更多