微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

希望这可以帮助!

原文地址:https://www.jb51.cc/c/114986.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐