解决方法
我对此不是100%肯定,但这可能是为了防止语法模糊.例如,考虑以下类:
class BadTimes { struct Overloaded; int Overloaded; // Legal,but a very strange idea. int confusing(Overloaded); // <-- This line };
指示线是什么意思?如所写的,这是一个名为confused的成员函数的声明,它接受类型为Overloaded的对象(其名称在函数声明中未指定)作为参数,并返回一个int.如果C 11允许初始化器使用括号,这将是不明确的,因为它也可以是int类型的成员的定义,名为confused,它被初始化为数据成员Overloaded的值. (这与Most Vexing Parse的当前问题有关)
通过要求花括号,这种歧义被删除:
class BadTimes { struct Overloaded; int Overloaded; // Legal,but a very strange idea. int confusing{Overloaded}; // <-- This line };
现在,很明显,混乱实际上是一个int初始化为Overloaded的值,因为没有办法把它看作一个函数声明.
希望这可以帮助!