推 kkroy:很謝謝你! 11/23 21:21
→ loveme00835:第二點... 11/23 21:46
→ loveflames:樓上想說compiler可以做掉,不用多跑一次? 11/23 21:54
→ loveme00835:HasPtr Obj2=HasPtr(XXX); 這邊要看情形, string 那邊 11/23 21:57
→ loveme00835:是直接當建構子參數去呼叫 11/23 21:57
→ loveme00835: 沒有暫時物件 11/23 22:22
→ loveflames:那是標準允許省掉這步驟吧, C++ Primer 477頁也這樣講 11/23 22:27
※ 編輯: loveflames 來自: 111.252.70.123 (11/23 22:29)
→ loveflames:說可以跳過copy ctor直接建物件,但並非一定得跳過 11/23 22:30
推 loveme00835:看了規格書, 12.6.1 只有example有講到, 但沒明文規定 11/23 22:39
#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也會不過,這就不知道原因為何了
推 loveme00835:VC++ 是會過的, gcc 不會 11/23 23:15
推 johnhmj:它的中文維基還有原始碼範例。 11/24 04:54
這樣不知有沒有解釋錯
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)
推 johnhmj:所以你最好是給它定義(假如有用到的話…)。 11/24 13:55