为什么类内初始值设定项只能使用=或{}?
答
对此我不是百分百肯定的,但这可能是为了防止语法不明确。例如,请考虑以下课程:
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing(Overloaded); // <-- This line
};
指示的线是什么意思?正如所写,这是一个名为confusing
的成员函数的声明,它接受Overloaded
(其名称未在函数声明中指定)的对象作为参数并返回int
。如果C++ 11允许初始值设定项使用括号,则这可能是不明确的,因为它也可能是int
类型的成员的定义,其名称为confusing
,它被初始化为数据成员Overloaded
的值。 (这与当前问题与Most Vexing Parse)
通过要求大括号,这种不确定性被删除:
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing{Overloaded}; // <-- This line
};
现在,很明显,confusing
实际上是初始化为Overloaded
值的int
,因为没有办法将它作为函数声明来读取。
希望这会有所帮助!
你能否详细解释为什么'混淆'是定义而不是声明? **“这是一个名为混淆的成员函数的定义,它接受一个类型为Overloaded的对象作为参数**”。我有这个困惑,因为它应该是模糊的权利? – 2013-05-02 05:09:52
@ Koushik-你说得对,那应该是宣言,而不是定义。让我解决这个问题... – templatetypedef 2013-05-02 05:34:52