你好,祝你有美好的一天。std ::地圖屬性 - C +標準要求?
這是真的(是由標準的要求),該標準C++ std::map<Key, Value>
類必須具有以下特性:
- 它可以工作,如果價值沒有
operator=
或operator=
是私有的(和std::map
是不是的私人朋友值)。 - 它可以工作,如果價值沒有默認構造函數或默認構造函數是私有的(和
std::map
不是一個私人朋友的價值)
爲什麼我在問 - 我一直在問到爲內部使用std :: map的類編寫一個嵌入式替換。在IN過程中,事實證明該班級應該在沒有operator=
的情況下工作(只要您避免map[key] = value;
)。我nuked operator=
要求,但事實證明,使用默認的構造函數值也造成了一些問題(o_O),因爲類應該是值沒有默認的構造函數。那麼......是那些std::map
的標準屬性,還是原始類依賴於實現特定/未定義的行爲?我檢查了「C++標準 - ANSI ISO 14882 2003」,我找不到任何這樣的要求。我可能也可以覈實「默認構造函數的要求」(只要用戶避免某些調用,例如調用map[key]
爲不存在的鍵),但我當然沒有聽說過std :: map的這些屬性...
所以...你覺得怎麼樣?
標準(C++ 03)指定哪些操作需要'V'爲'DefaultConstructible'? – SigTerm
'map [key]'需要默認的構造函數,因爲如果'key'不存在,將會在地圖中插入一個默認構造的實例。 - 這個代碼路徑需要存在,即使從未在運行時獲取。 – visitor
@SigTerm:是的,實際上每個操作都會詳細說明各種需要遵守的要求(在一般要求之上)。大多數情況下,他們可以用一些邏輯來推斷:) –