c – 为什么课堂初始化器只能使用=或{}?

In-class initializers(C 11功能)必须用大括号括起来或按照=符号.它们可能不在括号内指定.

这是什么原因?

解决方法

我对此不是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的值,因为没有办法把它看作一个函数声明.

希望这可以帮助!

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...