簡體   English   中英

C ++ 11標准容器是“最終的”嗎?

[英]Are C++11 standard containers “final”?

我們(應該)知道C ++標准庫容器,包括std::string ,並不意味着繼承自。 但是,C ++ 98/03確實允許我們這樣做,即使它導致了錯誤。

既然final關鍵字可用,那些標准庫容器是否標記為final以防止對它們的繼承使用不當?

如果沒有,為什么?

LWG在最近於2012年2月6日至10日舉行的Kona會議上討論了這個問題。這是LWG 第2113期

LWG決定將LWG 2113標記為NAD(不是缺陷),理由是該標准已經清楚,現有的類如容器和std::string不能被實現標記為最終。

討論包括這樣一個事實:盡管從這些類派生出來可能不贊成,但在C ++ 98/03中這樣做顯然是合法的。 並且在C ++ 11中將其視為非法會破壞太多代碼。

更新

目前, 當前工作草案中沒有庫類型標記為final

std::string似乎沒有標記為final,其他容器也沒有。

我猜測為什么會這樣,即使從它們推導出來也不是一般的推薦,沒有人確定如果它被禁止會破壞多少工作代碼。

還要注意,對於它的價值而言, final在技​​術上並不是一個關鍵詞 - 它是附加了特殊含義的標識符,但僅限於特定情況。 包含類似int final; final = 1;代碼int final; final = 1; int final; final = 1; 仍然有效。 這主要是為了向后兼容 - 至少在新代碼中,使用final僅用於特殊含義,而不是普通標識符幾乎肯定更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM