在C ++ 11中,安全布爾的習語顯然已被棄用,因為它可以被簡單的替換explicit operator bool() const;根據答案中的標準引用§4 [conv] p3:對于某些發(fā)明的臨時變量(§8.5),T當且僅當聲明T t=e;格式正確時,表達式e才能隱式轉換為類型t。某些語言結構要求將表達式轉換為布爾值。對于某些發(fā)明的臨時變量t(§8.5),當且僅當聲明格式正確時,表示出e現(xiàn)在這樣的上下文中的表達被上下文轉換為bool并且格式良好bool t(e);。突出顯示的部分清楚地顯示了“隱式顯式轉換”(在標準中稱為“上下文轉換”)為@R。馬蒂紐說。需要“隱式顯式強制轉換”的“某些語言結構”似乎如下:if,while,for(§6.4 [stmt.select] p4)二元邏輯運算符&&和||(§5.14 [expr.log.and/or] p1兩者)邏輯否定運算符!(§5.3.1 [expr.unary.op] p9)條件運算符?:(§5.14 [expr.cond] p1)static_assert(§7 [dcl.dcl] p4)noexcept(§15.4 [except.spec] p2)我們在標題中的假設是否正確?我希望我們不會忽視任何潛在的缺點。
3 回答

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
是。這是僅存在隱式用戶定義轉換的問題的示例,并且由于這個問題而實際上發(fā)明了明確的用戶定義轉換運算符,并且用更清潔和更合理的東西替換所有安全bool的東西。

哆啦的時光機
TA貢獻1779條經驗 獲得超6個贊
我不會稱之為“過時”。不是每個人都在邁向C ++ 11(甚至不到1歲)。即使編寫了大量的編碼器,保持代碼向后兼容的能力也是必須的,考慮到這種習慣看起來對于圖書館比對于正確的程序更合理。

嚕嚕噠
TA貢獻1784條經驗 獲得超7個贊
我不得不因為分歧而不得不投票,盡管我會親自給你買啤酒并說“嘿嘿沒有感情”。但是--std=c++0x
,在最終釘子進入標準棺材之前很久,C ++ 11中的許多范例都經歷了部署,他們決定將這個名稱放在ISO規(guī)范上。除非你是一個非常深入的模板元編程癮君子,否則C ++ 11規(guī)范的細節(jié)與人們使用的內容可能對你沒有任何影響......這意味著它甚至比所有實際目的都要早于2011年。
- 3 回答
- 0 關注
- 580 瀏覽
添加回答
舉報
0/150
提交
取消