2011-04-11 37 views
4

任何人都可以從ISO N3242§3.2,第二點任何人都可以解釋當前C++ 0x標準草案的這一段嗎?

一組候選功能的成員,如果它是由 重載時從potentiallyevaluated表達稱爲選擇的ODR使用的解釋此語句。 (注意:這包括調用命名函數(5.2.2),操作符重載 (第13章),用戶定義的轉換(12.3.2),分配函數 放置新(5.3.4),以及非 - 默認初始化(8.5)。

ISO標準2003:表示

如果它是由重載解析選擇時 從一個潛在的評估表達式稱爲用於重載函數。 [注意:這涵蓋了調用 到命名函數(5.2.2),操作符超載(第13章),用戶定義的 轉換(12.3.2),分配函數爲新的放置(5.3.4), 以及非 - 默認初始化(8.5)。

這些陳述的實際區別是什麼?

任何人都可以在示例/程序的幫助下解釋這一點嗎?

回答

7

術語「重載函數」在引用成員或集合之間(略)不明確。 C++ 11闡明瞭從未從潛在評估表達式中選擇的函數不會被使用。

術語「odr-used」是C++ 11中新增的。它基本上意味着給定的對象可能在最終的編譯二進制文件中表示,並且適用one-definition rule

4

該段落改爲修復Core Issue #1174。在那裏你可以找到顯示差異的例子。

+1

我認爲這更多地適用於前面的句子,「一個虛擬成員函數是不正確的,如果它不是純粹的」,這最終沒有從C++ 03改變。也許他們認爲「如果」沒有問題,因爲它不是「當且僅當」,並且過載選擇規則隱含使用odr。 – Potatoswatter 2011-04-11 06:45:16

+0

@Krill:他們解釋的不是這個陳述(全部)......對吧? – 1User 2011-04-11 06:51:47

+0

是的,[Potatoswatter](http://stackoverflow.com/users/153285/potatoswatter)是正確的,這解釋了聲明的其他部分。希望這仍然有幫助。 – 2011-04-11 06:56:19

相關問題