【发布时间】:2019-05-30 18:51:47
【问题描述】:
我对确定表达式的值类别感到很困惑。您能否提供确定表达式的值类别应采取的基本步骤(应分析什么)?
【问题讨论】:
-
您能引用标准中让您感到困惑的部分吗?这可能会得到更好的回应。
标签: c++11 rvalue xvalue value-categories prvalue
我对确定表达式的值类别感到很困惑。您能否提供确定表达式的值类别应采取的基本步骤(应分析什么)?
【问题讨论】:
标签: c++11 rvalue xvalue value-categories prvalue
如果您只是想要一个快速且通常正确的答案,请考虑以下经验法则:
std::move 和 有时 @ 987654327@)。但在某些情况下,类别可能仍不清楚。而且上面涉及到一些简化(特别是A.B和A ? B : C的规则比较复杂)。
唯一真正可靠的方法是在标准中寻找答案。
根据语法确定您的表达方式。字面意思?运算符表达式?一个拉姆达?等等。
如果表达式实际上是对重载运算符函数的调用,则值类别由重载决议选择的运算符函数的返回类型确定,如[expr.call] 中所述。在这种情况下,请忽略内置运算符行为的描述。
否则,请查找 [expr.prim] 或 [expr.compound] 的部分(请参阅table of contents)以获取表达式的语法形式。该部分将说明如何确定表达式的值类别。通常需要知道任何子表达式的类型和值类别,因此您可能需要递归地遵循这些规则。
【讨论】: