【问题标题】:Why bool conversion explicitly mentions prvalue为什么布尔转换明确提到prvalue
【发布时间】:2017-07-05 02:17:03
【问题描述】:

在 4.14 中 http://eel.is/c++draft/conv.bool#1

上面写着:

算术、无范围枚举、指针或指向的指针的prvalue 成员类型可以转换为 bool 类型的 prvalue

为什么要特别强调prvalue?

算术类型的左值也可以转换为bool。

【问题讨论】:

  • 算术类型的左值也可以转换为 bool - 现在了解标准如何定义这种转换。

标签: c++


【解决方案1】:

标准不希望布尔转换影响左值,因此不允许这样做。

您当然可以将算术类型的左值转换为bool 类型,但这不是通过(仅)布尔转换来完成的。将算术左值转换为bool 是一个标准的转换序列,包括左值到右值的转换,然后是布尔转换。

【讨论】:

  • 在这里进行布尔转换的情况下,你知道“左值到右值”背后的原理吗?
  • @FunkyBaby 是的,一致性。 C++ 中所有与值相关的操作都在右值上完成。当您拥有int i = 42; int j = i + 1; 时,i 将在+ 看到它之前首先进行左值到右值的转换,因为运算符+ 对右值进行操作。在 C++ 中,左值到右值的转换一直发生。为什么布尔转换应该是一个例外?
  • 感谢您的回答。但是eel.is/c++draft/expr.add 中没有提到 l/r 值转换。这是在哪里提到的?
  • @FunkyBaby 见[expr],尤其是第9点
  • 我已经看过了。该条款不支持您的主张。
猜你喜欢
  • 2012-05-04
  • 2018-02-11
  • 1970-01-01
  • 2011-11-29
  • 2014-03-16
  • 2016-02-27
  • 2013-04-01
  • 2011-02-26
  • 2014-05-12
相关资源
最近更新 更多