【发布时间】:2017-07-19 17:14:38
【问题描述】:
我知道要初始化类中的引用成员变量,我必须使用初始化器列表,使用参数化构造函数来初始化成员变量。 我也知道不需要默认构造函数。
问题:
但我不明白为什么定义默认构造函数会引发编译错误? 编译器是否不够聪明,无法在以下情况下考虑参数化构造函数而不是抛出错误?
如果上述问题有令人信服的答案,那么为什么编译器会允许声明默认构造函数(没有定义)?它在这里有什么不同?
:
class SomeClass
{
public:
//SomeClass(){} //THIS IS AN ISSUE
//SomeClass(); //THIS IS FINE THOUGH
SomeClass(int j):i(j){}
int& i;
};
int main()
{
SomeClass obj(2);
return 0;
}
我相信 const 成员函数的行为也是如此。引用和 const 成员变量的原因是否相同?
【问题讨论】:
-
您可能还想重新考虑拥有一个参考成员 - 这不是一个好主意。