首页 >后端开发 >C++ >类数据成员可以直接在C中初始化吗?

类数据成员可以直接在C中初始化吗?

Barbara Streisand
Barbara Streisand原创
2024-11-15 02:14:02411浏览

Can Class Data Members Be Initialized Directly in C  ?

类数据成员可以直接初始化吗?

在 C 中,类数据成员不能使用直接初始化语法 () 进行初始化,如以下示例所示:

#include <iostream>

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

int main() {
    test t;
    t.fun();
    return 0;
}

编译失败错误:

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant

为什么会出现这种情况?

C 标准明确禁止使用此语法进行类数据成员初始化。引入该功能的早期提案引用了解析问题作为原因。

考虑这个模棱两可的示例:

struct S {
    int i(x); // data member with initializer or...
    // ...
    static int x;
    int i(y); // member function declaration
    // ...
    typedef int y;
};

标准提出了一个解决方案:

为了消除歧义,C 标准仅允许类数据使用以下语法成员初始化:

  • =initializer-clause
  • {initializer-list }

此解决方案可确保清晰度并避免在以下情况下可能产生误解:声明可以类似于对象和函数声明。

以上是类数据成员可以直接在C中初始化吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn