首页 > 后端开发 > C++ > 为什么 C 类内初始化器必须使用 `=` 或 `{}`?

为什么 C 类内初始化器必须使用 `=` 或 `{}`?

Mary-Kate Olsen
发布: 2024-12-19 02:36:43
原创
691 人浏览过

Why Must C   In-Class Initializers Use `=` or `{}`?

为什么类内初始化器需要等于或大括号

C 11 引入了类内初始化器,它允许直接在类定义中初始化成员变量。但是,这些初始化器必须遵守特定的语法规则。

问题:

为什么强制类内初始化器使用等号 (=) 或大写字母大括号({})?

答案:

此要求旨在消除潜在的语法歧义。

考虑以下示例:

class BadTimes {
    struct Overloaded;
    int Overloaded; // Legal, but unusual.

    int confusing(Overloaded); // <-- Ambiguous line
};
登录后复制

有问题的行可以解释为两种方式:

  1. 作为带有单个 Overloaded 参数的函数声明,返回一个整数。
  2. 作为名为混淆的整数成员的声明和初始化,其中初始值为 Overloaded数据成员。

这种歧义是由于使用括号而产生的,括号既可以表示方法声明,也可以表示对象初始化。

为了解决这种混乱,C 11 强制在类初始化器中使用花括号。这明确表明混淆是一个成员变量:

class BadTimes {
    struct Overloaded;
    int Overloaded; // Legal, but unusual.

    int confusing{Overloaded}; // <-- Clear initialization
};
登录后复制

因此,类内初始化程序必须使用等号或大括号来防止语法误解并确保代码可读性。

以上是为什么 C 类内初始化器必须使用 `=` 或 `{}`?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板