2013-02-07 79 views
4

可以說我有以下代碼:C++,三元運算符的操作數評估規則

​​

似乎產生不管R.empty()被調用。那是標準行爲嗎?

+1

不,這不是標準的行爲。你是100%肯定的,這是怎麼回事?如你所說,你已經運行了一個調試器,你可以看到它檢查R.empty(),並且你正在看它調用'generate()'嗎? – templatetypedef

+0

@templatetypedef是的,絕對的把握,三重檢查 – Anycorn

+0

@gokcehan固定 – Anycorn

回答

11

從段落的C++ 11標準的5.16/1:

條件表達式組從右到左。第一個表達式被上下文轉換爲bool(條款4)。它被評估,如果它是真的,則條件表達式的結果是第二個表達式的值,否則是第三個表達式的值。 只有第二和第三個表達式中的一個被評價。與第一個表達式相關的每個值計算和副作用在與第二個或第三個表達式關聯的每個值計算和副作用之前被排序。