- 論壇徽章:
- 9
|
如- std::map<int, int> n;
- n[4] += 6;
復制代碼 當n[4]最初不存在的時候,n[4] += 6以后是否一定是6,也就是說n[4]自動插入的時候,是否一定是0。
查看map的源碼,當n[4]不存在的時候會執(zhí)行insert(_Where, value_type(_Keyval, mapped_type())),而此時mapped_type相當于int。
也就是說int i = int(),是否有C++標準保證i一定是0。
我查了下,與此相關的資料,發(fā)現(xiàn)這種情況屬于POD(plain old data),但是沒有找到具體解釋POD類型性質(zhì)的資料。就測試而言,我在VS和GCC上都測試過int i = int()這種寫法,發(fā)現(xiàn)i確實被置0了(觀察匯編代碼確實有置0的動作,而非巧合),但是找不到確切說明這個情況的C++標準文字內(nèi)容。
另外即使int i = int()有標準保證其一定是0,那么是否標準保證n[4]在4不存在時也一定是0呢?因為有可能其相關代碼是這樣的:- mapped_type xxx;
- insert(_Where, value_type(_Keyval, xxx))
復制代碼 這樣就一定不能保證n[4]一定是0了。
請求確認相關標準文檔,非常感謝。。
|
|