为什么类数据成员不能通过直接初始化语法初始化?

析构函数

我很好奇,为什么不能使用()语法初始化类的数据成员?考虑以下示例:

#include <iostream>
class test
{
    public:
        void fun()
        {
            int a(3);
            std::cout<<a<<'\n';
        }
    private:
        int s(3);    // Compiler error why???
};
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 ++标准对类数据成员的初始化怎么说?非常感谢您的帮助。谢谢

轨道轻赛

导致该功能介绍的早期建议说明,这是为了避免解析问题

这只是其中提供的示例之一:

不幸的是,这使得在解析声明时( expression-list ) ”形式的初始化程序变得模棱两可:

struct S {
    int i(x); // data member with initializer
    // ...
    static int x;
};

struct T {
    int i(x); // member function declaration
    // ...
    typedef int x;
};

一种可能的解决方案是依赖现有规则,即如果声明可以是对象或函数,那么它就是函数:

struct S {
    int i(j); // ill-formed...parsed as a member function,
              // type j looked up but not found
    // ...
    static int j;
};

一种类似的解决方案是应用另一条仅在模板中使用的现有规则,即如果T可以是类型或其他类型,则可以使用其他规则。typename如果真的是类型,则可以使用“ ”:

struct S {
    int i(x); // unabmiguously a data member
    int j(typename y); // unabmiguously a member function
};

这两种解决方案都引入了许多用户可能会误解的微妙之处(如comp.lang.c ++上的许多问题所证明的那样,为什么int i();块作用域中的”未声明默认初始化int)。

本文提出的解决方案是仅允许“ = initializer-clause ”和“ { initializer-list } ”形式的初始化程序这解决了大多数情况下的歧义问题。[..]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我不能通过Groovy中的构造函数内部的闭包来初始化最终类变量?

来自分类Dev

为什么我不能通过 FindViewById 方法初始化 VideoView 对象?

来自分类Dev

为什么不能通过初始化的参数推断出通用结构类型?

来自分类Dev

为什么我不能在类定义中直接初始化私有成员变量

来自分类Dev

为什么类类型的成员需要初始化?

来自分类Dev

为什么我不能在类中初始化非常量静态成员或静态数组?

来自分类Dev

为什么不能在公共头文件中初始化静态类成员?

来自分类Dev

为什么不能在类的成员函数中初始化QThread?

来自分类Dev

为什么智能指针类型的成员变量不能在类的声明处初始化?

来自分类Java

为什么我们不能通过未初始化的局部变量访问静态内容?

来自分类Dev

如果存在默认的成员初始化,为什么要使用成员初始化列表

来自分类Dev

为什么我不能使用构造函数初始化列表来初始化类内结构?

来自分类Dev

成员初始化

来自分类Dev

通过成员初始化列表初始化类的引用变量时出现问题

来自分类Dev

为什么我们不能延迟使用非默认构造函数初始化类成员?

来自分类Dev

为什么C ++中的成员初始化需要新的语法?

来自分类Dev

类的成员什么时候初始化?

来自分类Dev

在类主体中初始化数据成员

来自分类Dev

强制初始化模板类的静态数据成员

来自分类Dev

在类定义中初始化数据成员

来自分类Dev

从其他类的静态数据成员初始化映射

来自分类Dev

类模板静态数据成员的定义/声明/初始化

来自分类Dev

类定义中的静态数据成员初始化?

来自分类Dev

为什么不能单独初始化struct成员字段?(在USB设备驱动程序中)

来自分类Dev

为什么我们不能使用scanf直接初始化struct中的变量?

来自分类Java

java类成员初始化

来自分类Dev

C ++类成员初始化序列

来自分类Dev

初始化静态类成员

来自分类Dev

初始化禁止复制的成员类

Related 相关文章

  1. 1

    为什么我不能通过Groovy中的构造函数内部的闭包来初始化最终类变量?

  2. 2

    为什么我不能通过 FindViewById 方法初始化 VideoView 对象?

  3. 3

    为什么不能通过初始化的参数推断出通用结构类型?

  4. 4

    为什么我不能在类定义中直接初始化私有成员变量

  5. 5

    为什么类类型的成员需要初始化?

  6. 6

    为什么我不能在类中初始化非常量静态成员或静态数组?

  7. 7

    为什么不能在公共头文件中初始化静态类成员?

  8. 8

    为什么不能在类的成员函数中初始化QThread?

  9. 9

    为什么智能指针类型的成员变量不能在类的声明处初始化?

  10. 10

    为什么我们不能通过未初始化的局部变量访问静态内容?

  11. 11

    如果存在默认的成员初始化,为什么要使用成员初始化列表

  12. 12

    为什么我不能使用构造函数初始化列表来初始化类内结构?

  13. 13

    成员初始化

  14. 14

    通过成员初始化列表初始化类的引用变量时出现问题

  15. 15

    为什么我们不能延迟使用非默认构造函数初始化类成员?

  16. 16

    为什么C ++中的成员初始化需要新的语法?

  17. 17

    类的成员什么时候初始化?

  18. 18

    在类主体中初始化数据成员

  19. 19

    强制初始化模板类的静态数据成员

  20. 20

    在类定义中初始化数据成员

  21. 21

    从其他类的静态数据成员初始化映射

  22. 22

    类模板静态数据成员的定义/声明/初始化

  23. 23

    类定义中的静态数据成员初始化?

  24. 24

    为什么不能单独初始化struct成员字段?(在USB设备驱动程序中)

  25. 25

    为什么我们不能使用scanf直接初始化struct中的变量?

  26. 26

    java类成员初始化

  27. 27

    C ++类成员初始化序列

  28. 28

    初始化静态类成员

  29. 29

    初始化禁止复制的成员类

热门标签

归档