爲什麼你必須在構造函數中初始化對象數據成員,並且不能像初始類型那樣使用默認值初始化它們?是否有可能使用原始類型對它們進行初始化?默認初始化是對象的數據成員?
下面是一個例子:
class foo {
int a;
public:
foo(int _a) :a(_a) {};
};
class bar {
string a = "asdf";//no error
int num = 1;//no error
foo x(1); //error, why?
foo z;
public:
bar(): z(1){}//no error
};
由於禁止文字,這是幾乎相同的功能定義,並同時支持會使語言的語法更加複雜。爲什麼當你有兩種更可讀的方式來實現相同的目標? – StoryTeller
如果使用標識符而不是文字 - 'foo x(baz);' - 自從時間開始以來它就是成員函數的聲明。無論是函數還是變量,取決於範圍中的「baz」是一個類型還是一個變量都是導致瘋狂的一條路徑。 – molbdnilo