[英]What steps should I take to determine the value category of an expression?
我對確定表達式的值類別感到困惑。 您能否提供確定表達式值類別應采取的基本步驟(應分析什么)?
如果您只想獲得快速且通常正確的答案,請考慮以下經驗法則:
std::move
, 有時還包括 std::forward
)。 但在某些情況下,類別可能仍不清楚。 並且上面涉及一些簡化(特別是AB
和A ? B : C
的規則更復雜)。
唯一真正可靠的方法是在標准中尋找答案。
確定您在語法方面的表達方式。 一個字面意思? 運算符表達式? 一個lambda? 等等。
如果表達式是運算符表達式,請找出重載解析是選擇某些重載運算符函數還是內置候選運算符,如[over.match.oper] , [over.oper]和[over.built]中所述。 。
如果表達式實際上是對重載運算符的調用,則值類別由重載解析選擇的運算符的返回類型確定,如[expr.call]中所述 。 在這種情況下,為此目的,請忽略對內置操作員行為的描述。
否則,請找到[expr.prim]或[expr.compound]的部分(請參閱目錄 )以獲取表達式的語法形式。 該部分將說明如何確定表達式的值類別。 經常需要知道任何子表達式的類型和值類別,因此您可能需要遞歸地遵循這些規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.