Re: [問題] class的assignment運算子 (C++ Primer …
看板C_and_CPP (C/C++)作者loveflames (咕啾咕啾魔法陣)時間15年前 (2010/11/23 21:15)推噓6(6推 0噓 7→)留言13則, 4人參與討論串4/4 (看更多)
※ 引述《kkroy (☆㊣↖煞氣ㄟ阿喂↘ξ★)》之銘言:
: 我整理一下大家幫我回答的結論:
: 1. HasPtr Obj2 = Obj1;
: 是拿Obj1初始化Obj2,所以呼叫copy ctor,等價於 HasPtr Obj2(Obj1);
其他部份不再贅述
只談copy initialization(用=初始)跟direct initialization的差異
1.如果ctor宣告explicit,就只能用direct initialization
2.HasPtr Obj2(XXX); 跟 HasPtr Obj2=HasPtr(XXX);
後者可能會建立暫時物件
用string當例子
string S("123")是直接呼叫string(const char*s)
而string S="123"可能會先用string(const char*s)產生暫時物件
再呼叫string(const string& str)
3.copy initialization只能呼叫單一引數的ctor
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.252.70.123
推
11/23 21:21, , 1F
11/23 21:21, 1F
→
11/23 21:46, , 2F
11/23 21:46, 2F
→
11/23 21:54, , 3F
11/23 21:54, 3F
→
11/23 21:57, , 4F
11/23 21:57, 4F
→
11/23 21:57, , 5F
11/23 21:57, 5F
→
11/23 22:22, , 6F
11/23 22:22, 6F
→
11/23 22:27, , 7F
11/23 22:27, 7F
※ 編輯: loveflames 來自: 111.252.70.123 (11/23 22:29)
→
11/23 22:30, , 8F
11/23 22:30, 8F
推
11/23 22:39, , 9F
11/23 22:39, 9F
#include <iostream>
using namespace std;
struct aaa{
aaa(){}
aaa(int n){}
//private:
aaa(const aaa& a){}
};
int main (){
aaa s=1;
}
private那行註解如果拿掉
gcc會出現以下錯誤
initializing temporary from result of 'aaa::aaa(int)'
除非改成aaa s(1);
補充:gcc下將copy ctor宣告explicit也會不過,這就不知道原因為何了
推
11/23 23:15, , 10F
11/23 23:15, 10F
推
11/24 04:51, , 11F
11/24 04:51, 11F
推
11/24 04:54, , 12F
11/24 04:54, 12F
這樣不知有沒有解釋錯
T a=v在語意上等同T a(T(v)) (不管實際上有沒有跑copy ctor)
隱含了const T & temp=T(v)的意思
變成了copy initialization
所以才會出現error
※ 編輯: loveflames 來自: 111.252.74.51 (11/24 07:31)
推
11/24 13:55, , 13F
11/24 13:55, 13F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章