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

  免費(fèi)注冊 查看新帖 |

Chinaunix

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

[C++] 關(guān)于C++一些很微妙的疑問 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-07-26 11:24 |只看該作者 |倒序?yàn)g覽
不好意思.實(shí)在不知道用什么合適的主題。
第一個疑問是STL標(biāo)準(zhǔn)模板庫中的插入操作。
例如deque中的一個。
  1. template <class _Tp, class _Alloc>
  2. typename deque<_Tp, _Alloc>::iterator
  3. deque<_Tp,_Alloc>::_M_insert_aux(iterator __pos, const value_type& __x)
  4. {
  5.   difference_type __index = __pos - _M_start;
  6.   [b][color=Red]value_type __x_copy = __x;[/color][/b]
  7. ......
復(fù)制代碼
紅色部分是我的疑問. 我發(fā)現(xiàn)insert中,都會對傳入的插值引用建立一個局部拷貝,然后使用這份拷貝。而不使用傳入的參數(shù)。
不知是何用意。如果是為了避免傳入的__x被意外修改,這也說不通,因?yàn)開_x是const引用。

第二個疑問是來自effective C++中的,見Item 16.
他個的例子代碼是

  1. Derived& Derived::operator=(const Derived& rhs)
  2. {
  3.     if (this == &rhs) return *this;
  4.     static_cast<Base&>(*this) = rhs; // call operator= on
  5.                                                      // Base part of *this
  6.     y = rhs.y;
  7.     return *this;
  8. }
復(fù)制代碼
將派生類使用static_cast轉(zhuǎn)換為基類的引用,這樣可以正確實(shí)現(xiàn)對基類成員的賦值。
原文:

  1. Careful now! It is important that the cast be to
  2. a reference to a Base object, not to a Base object itself. If you cast *this to be a Base object, you'll end up
  3. calling the copy constructor for Base, and the new object you construct (see Item M19) will be the target of the
  4. assignment; *this will remain unchanged. Hardly what you want.
復(fù)制代碼
如果是static_case<Base>(*this) = rhs;
這為何會引起調(diào)用Base的構(gòu)造函數(shù)生成一個新的對象,并且賦值的對象是這個新對象?
我寫了代碼試了下,果然是這樣。

各位大俠不吝賜教啊.
thx...

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯(lián)賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯(lián)賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現(xiàn)代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術(shù)圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [報告]
發(fā)表于 2012-07-26 12:00 |只看該作者
第一個,就是“為了避免傳入的__x被意外修改”
因?yàn)樗鼪]法確定 __x 是不是此 deque 內(nèi)部某個元素的引用
如果是的話,一旦調(diào)整deque的大小,那么 __x 就可能嗝屁了

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯(lián)賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯(lián)賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現(xiàn)代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術(shù)圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [報告]
發(fā)表于 2012-07-26 12:03 |只看該作者
第二個問題,不是很明顯嘛,不知道你哪里迷糊

論壇徽章:
0
4 [報告]
發(fā)表于 2012-07-26 12:20 |只看該作者
回復(fù) 2# bruceteen


     你說的有道理. 謝謝!

論壇徽章:
0
5 [報告]
發(fā)表于 2012-07-26 12:22 |只看該作者
回復(fù) 3# bruceteen


    為嘛static_cast<Base&>(*this) = rhs; 這樣是正確的
而 static_cast<Base>(*this) = rhs; 不是正確的。 而且會導(dǎo)致創(chuàng)建臨時的Base對象。

論壇徽章:
6
技術(shù)圖書徽章
日期:2013-11-13 11:11:27子鼠
日期:2014-02-20 17:54:13處女座
日期:2014-06-16 17:43:33午馬
日期:2014-08-08 09:11:17未羊
日期:2014-08-10 11:57:072015年辭舊歲徽章
日期:2015-03-03 16:54:15
6 [報告]
發(fā)表于 2012-07-26 14:45 |只看該作者
Base& 和 Base 的區(qū)別
您需要登錄后才可以回帖 登錄 | 注冊

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

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(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
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP