【问题标题】:What steps should I take to determine the value category of an expression?我应该采取哪些步骤来确定表达式的值类别?
【发布时间】:2019-05-30 18:51:47
【问题描述】:

我对确定表达式的值类别感到很困惑。您能否提供确定表达式的值类别应采取的基本步骤(应分析什么)?

【问题讨论】:

  • 您能引用标准中让您感到困惑的部分吗?这可能会得到更好的回应。

标签: c++11 rvalue xvalue value-categories prvalue


【解决方案1】:

如果您只是想要一个快速且通常正确的答案,请考虑以下经验法则:

  • 如果它是一个函数或一个已经存在的对象,那么它就是一个glvalue。
    • 大多数glvalues都是左值。
    • xvalues 是可以专门从以下位置移动的东西:强制转换为右值引用类型,或函数返回类型为右值引用类型的函数调用(尤其是 std::move有时 @ 987654327@)。
  • 如果它只是一个值或一种创建新对象的方式,那么它就是一个prvalue。

但在某些情况下,类别可能仍不清楚。而且上面涉及到一些简化(特别是A.BA ? B : C的规则比较复杂)。

唯一真正可靠的方法是在标准中寻找答案。

  1. 根据语法确定您的表达方式。字面意思?运算符表达式?一个拉姆达?等等。

  2. 1234563 /p>
  3. 如果表达式实际上是对重载运算符函数的调用,则值类别由重载决议选择的运算符函数的返回类型确定,如[expr.call] 中所述。在这种情况下,请忽略内置运算符行为的描述。

  4. 否则,请查找 [expr.prim] 或 [expr.compound] 的部分(请参阅table of contents)以获取表达式的语法形式。该部分将说明如何确定表达式的值类别。通常需要知道任何子表达式的类型和值类别,因此您可能需要递归地遵循这些规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多