首页 > 后端开发 > C++ > 为什么不能使用大括号括起来的语法来初始化类数据成员?

为什么不能使用大括号括起来的语法来初始化类数据成员?

Linda Hamilton
发布: 2024-11-16 08:30:03
原创
700 人浏览过

Why Can't Class Data Members Be Initialized Using Brace-Enclosed Syntax?

为什么禁止类数据成员直接初始化语法

在 C 中,类数据成员不能使用 ( ) 大括号括起来的语法。考虑以下代码:

class test {
public:
    void fun() {
        int a(3);
        std::cout << a << '\n';
    }

private:
    int s(3);    // Compiler error
};
登录后复制

编译失败,并出现以下错误:

  • “数字常量之前需要标识符”
  • “需要 ',' 或 '. ..' 在数字常量之前”

那么,为什么有这个限制?

根据早期的 C 提案和标准讨论,该禁令的目的是防止解析歧义 。如果允许大括号括起来的初始化,编译器可能会在以下情况下误解声明:

struct S {
    int i(x); // data member with initializer
    // Other code
    static int x;
};
登录后复制

这里,不清楚 i(x) 是数据成员初始值设定项还是成员函数声明,因为两者都遵循相同的语法。

为了解决这种歧义,C 选择了以下限制:

  • 数据成员必须使用 = 初始化子句或 { 初始化器列表 } 语法进行初始化.
  • 成员函数必须始终使用 () {} 语法进行声明。

此决定可以避免解析问题并确保代码的清晰度。

以上是为什么不能使用大括号括起来的语法来初始化类数据成员?的详细内容。更多信息请关注PHP中文网其他相关文章!

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