我一直在網上閱讀很多人,似乎很多人提到了下面的規則(但我在標準中找不到它),關於左值到右值的轉換,當需要它?
加法運算符+(和所有其他二元運算符)要求兩個操作數都是右值,結果是右值。 等等..
我檢查C++標準,它明確指出(第3.10/2),
每當glvalue出現在 上下文其中prvalue預計, 的glvalue被轉換爲prvalue
(第5/9),
每當glvalue表達似乎 作爲操作者的操作數 預計,該操作數一prvalue, 左值到右值(4.1), 陣列到指針(4.2),或 函數到指針(4.3)標準 轉換適用於將 表達式轉換爲prvalue。
它使用術語操作數「期望」prvalue。然而,當我看着加法運算,乘法運算符等,僅提及的是,結果是prvalue,但它並沒有說什麼操作數「預期」是什麼。
無論做二元運算符真的認爲操作數是prvalue使得在以下情況下的差異,
int b = 2;
int a = b + 1;
若b有望成爲一個prvalue,會有一個左值到右值轉換在這裏,然後它會執行prvalue + prvalue並返回prvalue,結果prvalue分配給左值一個。
但是,如果是一個prvalue b不是必需的,這將是左值+ prvalue,結果是一個prvalue。
我真的想知道在什麼地方標準明確或含蓄地提到,對於不同的運營商 規則?我檢查了所有操作符部分,並且只檢查了幾個操作符,標準明確提到操作數和結果是左值還是右值。對於大多數操作員來說,標準只提到結果,而不是操作數要求。
謝謝。
順便說一下,我在標準5.19關於常量表達式發現可能非常非常「含蓄」暗示二元操作需要對操作數左值到右值的轉換。詳情請參考我以前的問題,
mixing use of constexpr and const?
甲條件表達式是一個常數 表達除非它涉及的 下列之一爲潛在 評估子表達式(3.2)。
...
- 左值到右值轉換(4.1) ,除非它被施加到
---- 整型或枚舉類型的glvalue該 是指非-volatile const對象 與前面的初始化, 以恆定表達初始化
感謝閱讀。
謝謝。但是,您引用的上述語句在新標準N3225中已被刪除......難怪我無法找到它......我認爲這是不同人員處理不同部分的問題,並且對一致性問題沒有太多考慮。 – user534498 2011-02-25 00:00:51