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

  免費注冊 查看新帖 |

Chinaunix

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

[C++] 請教一個C++拷貝構(gòu)造函數(shù)問題 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-10-15 23:05 |只看該作者 |倒序瀏覽
#include <iostream>
using namespace std;

class Test
{
public:
    Test(){
        cout << "constructor"<<endl;
    }
//    Test(Test & hu){
//        cout << "copy constructor" << endl;
//    }

    ~Test(){}
};

Test fun(Test x)
{
    return x;
}
int main(void)
{
    Test h1;
    Test h2 = fun(h1);
    return 0;
}
  在上面的代碼中,若將注釋去掉,即自己寫拷貝構(gòu)造函數(shù),則編譯通不過,想了很長時間都沒想明白,為什么?

[ 本帖最后由 qylhnu 于 2008-10-15 23:08 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2008-10-15 23:22 |只看該作者
因為fun函數(shù)返回是一個臨時Test對象,對它的引用只能是const引用,而你的拷貝構(gòu)造函數(shù)是非const引用(Test h2 = fun(h1);),所以不能通過編譯
把你的拷貝構(gòu)造函數(shù)改為const引用就行了,另外一般拷貝構(gòu)造函數(shù)都寫成const引用

論壇徽章:
0
3 [報告]
發(fā)表于 2008-10-15 23:34 |只看該作者
非常感謝!大概明白了。

再麻煩下,我試著同時加了有const和無const的兩個版本,然后發(fā)現(xiàn)系統(tǒng)直接調(diào)用的是無const的那個版本,這是為什么呢?

論壇徽章:
0
4 [報告]
發(fā)表于 2008-10-15 23:44 |只看該作者
原帖由 qylhnu 于 2008-10-15 23:34 發(fā)表
非常感謝!大概明白了。

再麻煩下,我試著同時加了有const和無const的兩個版本,然后發(fā)現(xiàn)系統(tǒng)直接調(diào)用的是無const的那個版本,這是為什么呢?

不可能吧?
你再好好確信下,或者把代碼和結(jié)果貼出來

論壇徽章:
0
5 [報告]
發(fā)表于 2008-10-15 23:49 |只看該作者
#include <iostream>
using namespace std;

class Test
{
public:
    Test(){
        cout << "constructor"<<endl;
    }
    Test(const Test & hu){
        cout<<": const copy constructor" << endl;
    }
    Test(Test & hu){
        cout <<": copy constructor" << endl;
    }
    ~Test(){}

};

Test fun(Test x)
{
    return x;
}
int main(void)
{
    Test h1;
    Test h2 = fun(h1);
   
    return 0;
}
結(jié)果:
constructor
: copy constructor
: copy constructor

論壇徽章:
0
6 [報告]
發(fā)表于 2008-10-16 00:09 |只看該作者
這個我也不能很好解釋,這里給出一種可能的解釋:
h1->x:調(diào)用一次拷貝函數(shù),函數(shù)重載時解析為非const版本
func(h1)->h2:這里本來有一個中間的臨時對象,但從結(jié)果來看被編譯器優(yōu)化了(NRV,命名返回值優(yōu)化),所以還是調(diào)用非const

我想產(chǎn)生這種似乎矛盾的結(jié)果,原因是編譯器的分階段處理造成的
當然,從實踐角度來看,不應該寫兩個版本的,const版本已經(jīng)完全夠用(我還沒發(fā)現(xiàn)需要非const版本的情景)

論壇徽章:
0
7 [報告]
發(fā)表于 2008-10-16 09:48 |只看該作者
再次感謝!還學習了“命名返回值優(yōu)化”,好像優(yōu)化后直接用x做參數(shù)了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(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