【问题标题】:What really is constant? Definition [closed]什么是真正不变的?定义[关闭]
【发布时间】:2017-12-30 15:33:22
【问题描述】:

我对常量有点困惑。它在 Programming Principles and Practice Using C++ 一书中说你不能给常量一个新的值。

constexpr int max = 17;
int val = 19;
max+2

但是这段代码让我很困惑。 max+2,这意味着最大值将有一个新值,19,那么真正的常数是多少?你怎么能把 2 加到一个常数上?

【问题讨论】:

  • max+2 不会修改 max
  • max+2 是一个表达式,不会重新分配最大值。尝试重新分配最大值,即max = max + 2 - 编译器会抱怨。
  • 3+2 并不意味着3 会有一个新值5

标签: c++ c++11 constants


【解决方案1】:

max + 2 并不意味着max 会有一个新值。超过17 + 2 意味着17 将有一个新值。 max + 2 是一个表达式,其值为 19。在计算该表达式之后,max 仍然等于 17。

【讨论】:

    【解决方案2】:

    max+2 不会以任何方式修改max。它只是一个表达式,其值为max 加上2。也许您将其与实际上无法做到的max+=2 混淆了。如果您在代码的最后一行之后检查 max 的值,它仍然是 17。

    【讨论】:

    • 我现在明白 max+=2 是我的想法。谢谢大家
    【解决方案3】:

    您可以在产生新值的表达式中使用常量。换句话说,max + 2 由两个常量(max2)相加,生成值19int val = 19; 也使用真正的常量19(整数文字,这是编程中常量的一种形式)。 val 显然不是常量,稍后在代码中执行 val += 9;val = 32; 是有效的。如果您稍后尝试在代码中执行max = 7;,它将无法编译[除非编译器损坏]

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 2011-12-17
      • 2014-11-30
      • 2021-12-26
      • 1970-01-01
      • 2011-03-14
      • 2021-12-15
      • 2016-03-29
      • 1970-01-01
      相关资源
      最近更新 更多