今天在看《effective C++:55 第三版》条款18:80页的时候,看到用外覆类型定义类型参数的例子:
class Month{
public:
static Month Jan(){return Month(1);}
private:
explicit Month(int num){val=num;}
int val;
};
然后想到前几天做到的一个笔试题:
struct CLS
{
int m_i;
CLS(int i): m_i( i ) { }
CLS()
{
CLS( 0 );
}
};
int main(void)
{
CLS obj;
cout << obj.m_i << endl;
return 0;
}
这题的答案是,不能输出0,因为在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为,亦即仅执行函数调用,而不会执行其后的初始化表达式。只有在生成对象时,初始化表达式才会随相应的构造函数一起调用。