亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2123 | 回復: 4
打印 上一主題 下一主題

[C++] 關于C++的POD類型,求確認 [復制鏈接]

論壇徽章:
9
摩羯座
日期:2013-08-15 15:18:48獅子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龍
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亞洲杯之韓國
日期:2015-03-26 10:16:442015亞冠之武里南聯(lián)
日期:2015-08-18 14:55:52
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-09-18 15:39 |只看該作者 |倒序瀏覽
  1. std::map<int, int> n;
  2. 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呢?因為有可能其相關代碼是這樣的:
  1. mapped_type xxx;
  2. insert(_Where, value_type(_Keyval,  xxx))
復制代碼
這樣就一定不能保證n[4]一定是0了。
請求確認相關標準文檔,非常感謝。。

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設計版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
2 [報告]
發(fā)表于 2015-09-18 21:03 |只看該作者
23.4.4.3 Map Element Access

T& operator[](const key_type& x);

Effects: If there is no key equivalent to x in the map, inserts value_type(x, T()) into the map.

Requires: key_type shall be CopyConstructible and mapped_type shall be DefaultConstructible.

Returns: A reference to the mapped_type corresponding to x in *this.

Complexity: logarithmic.

T& operator[](key_type&& x);

Effects: If there is no key equivalent to x in the map, inserts value_type(std::move(x), T()) into the map.

Requires: mapped_type shall be DefaultConstructible.

Returns: A reference to the mapped_type corresponding to x in *this.

Complexity: logarithmic.


如果key不存在,map使用default constructor構(gòu)造value,也就是int(),所以返回值是0。
當然,你正在用的編譯器不一定遵守這個標準。

論壇徽章:
9
摩羯座
日期:2013-08-15 15:18:48獅子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龍
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亞洲杯之韓國
日期:2015-03-26 10:16:442015亞冠之武里南聯(lián)
日期:2015-08-18 14:55:52
3 [報告]
發(fā)表于 2015-09-19 12:23 |只看該作者
本帖最后由 w_anthony 于 2015-09-19 12:26 編輯

回復 2# windoze


    謝謝LS解答了,map:: operator[]插入時有標準要求一定會調(diào)用mapped_type();不過int i = int()是否一定是0,有沒有標準保證呢?

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設計版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
4 [報告]
發(fā)表于 2015-09-19 22:29 |只看該作者
回復 3# w_anthony

標準說:
8.5/5
To default-initialize an object of type T means:

— if T is a non-POD class type (clause 9), the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);

— if T is an array type, each element is default-initialized;

— otherwise, the object is zero-initialized.

所以int a=int()之后,a就等于0,但還是那句話,你正在用的編譯器不一定完全符合標準。

PS. 注意你不能寫int a(),因為這是一個函數(shù)聲明,不是變量定義。

論壇徽章:
9
摩羯座
日期:2013-08-15 15:18:48獅子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龍
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亞洲杯之韓國
日期:2015-03-26 10:16:442015亞冠之武里南聯(lián)
日期:2015-08-18 14:55:52
5 [報告]
發(fā)表于 2015-09-20 01:06 |只看該作者
回復 4# windoze


    非常感謝LS,只要不是古董級的編譯器,一般C++標準都可以認為是支持的。它自身再怎么擴展也不應該和標準有沖突,既然有相關規(guī)定,而不是未定義行為,那么我覺得還是可以放心使用的,最多可以結(jié)合實際測試結(jié)果看看。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP