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

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

Chinaunix

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

[C++] 求助,Lamba的綁定規(guī)則詳解 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-10-27 20:00 |只看該作者 |倒序?yàn)g覽
Lamba表達(dá)式里的匿名函數(shù),參數(shù)綁定,可按值訪問和可按引用訪問兩種. 我沒搞懂的是,如果變量本身是個指針,按值訪問訪問的是指針變量指向的真正值,還是指針變量本身的內(nèi)存地址,按引用訪問呢?這個問題一直搞不懂

還有一點(diǎn)是,lamba表達(dá)式如果不是立即執(zhí)行的,而是作為函數(shù)指針傳遞并交給別的方法執(zhí)行(比如回調(diào)),如果是按引用訪問局部變量,這些局部變量是否會因?yàn)樽饔糜蛳У脑蛉吭L問不了了?

論壇徽章:
59
2015年亞洲杯之約旦
日期:2015-01-27 21:27:392015年亞洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵節(jié)徽章
日期:2015-03-06 15:50:392015年亞洲杯之阿聯(lián)酋
日期:2015-03-19 17:39:302015年亞洲杯之中國
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03雙子座
日期:2014-12-10 21:39:16處女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
2 [報(bào)告]
發(fā)表于 2015-10-27 20:09 |只看該作者
1. 和一般函數(shù)沒區(qū)別。ㄒ眠是那個引用, 指針的引用自然也是指針的引用, 指針也是一般變量。。
2. 和一般函數(shù)沒區(qū)別啊。會訪問已過期的內(nèi)容, 如是指針的話,可能會引起非法訪問。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2015-10-28 09:59 |只看該作者
folklore 發(fā)表于 2015-10-27 20:09
1. 和一般函數(shù)沒區(qū)別。ㄒ眠是那個引用, 指針的引用自然也是指針的引用, 指針也是一般變量。。
2.  ...


那么我進(jìn)一步問以下的一個我遇到的奇怪問題,在windows7 + VC2015下

代碼我無法完全搬過來,只能描述偽代碼

//以下代碼在某函數(shù)內(nèi)部
auto ptrClassA = ClassA::getinsten();  //得到ClassA類的單例對象指針
//Lamba代碼
[&]()
{
     ptrClassA->setAAA();   //調(diào)用ClassA的一個成員函數(shù)
}

以上代碼,編譯通過,執(zhí)行出錯,說ptrClassA出現(xiàn)內(nèi)存沖突

寫成這樣就沒有問題了
[&,ptrClassA]()
{
     ptrClassA->setAAA();   //調(diào)用ClassA的一個成員函數(shù)
}

=========
我的問題就是,下面這種是按值把指針傳進(jìn)去了,和上面那種按引用把指針傳進(jìn)去,有啥區(qū)別呢,不理解

論壇徽章:
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
4 [報(bào)告]
發(fā)表于 2015-10-28 12:19 |只看該作者
回復(fù) 3# abcbuzhiming
第一段代碼,你引用了一個臨時的局部對象
第二段代碼,是傳值,那個臨時的ptrClassA消失了沒關(guān)系

換句話說,第一段代碼,你用的是ptrClassA本身,它沒了,你的lambda函數(shù)就沒意義了
第二段代碼,你用的是ptrClassA的值,也就是ClassA::getinsten(),它是一直存在的

舉個例子:
  1. int main( void )
  2. {
  3.         int ininsten = 123;

  4.         // 第一段代碼相當(dāng)于
  5.         int** a;
  6.         {
  7.                 int* x = &ininsten;
  8.                 a = &x;
  9.                 x = NULL;
  10.         }
  11.         cout << **a << endl;

  12.         // 第二段代碼相當(dāng)于
  13.         int* b;
  14.         {
  15.                 int* x = &ininsten;
  16.                 b = x;
  17.         }
  18.         cout << *b << endl;

  19.         return 0;
  20. }
復(fù)制代碼

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2015-10-28 16:09 |只看該作者
bruceteen 發(fā)表于 2015-10-28 12:19
回復(fù) 3# abcbuzhiming
第一段代碼,你引用了一個臨時的局部對象
第二段代碼,是傳值,那個臨時的ptrClas ...


你的意思難道是說,指針這種類型如果作為局部變量,他是會因?yàn)樽饔糜蛟蛳У?但是它存儲的值(指向?qū)ο蟮牡刂?還是存在,是這個意思嗎?這確實(shí)有點(diǎn)難理解,我原本以為指針應(yīng)該是和對象本身綁定的,對象不消失,則指針不消失

論壇徽章:
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 [報(bào)告]
發(fā)表于 2015-11-02 10:15 |只看該作者
有指針的時候還沒對象這個概念。
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP