2

换句话说,为什么编译器会抱怨这样的事情:

class Integer {
  int i = 3;
};

尽管这是一个非常愚蠢的例子,但在许多情况下,类的成员可以默认初始化为某个值(例如,某些内部计数器始终默认初始化为零)。在类构造函数之外禁止这些默认初始化的原因是什么?

4

2 回答 2

1

因为有构造函数。

class InTeGeR
{
    Public:
           int i;
           InTeGeR()
            {
                i=3;
            }
 }

在存在构造函数初始化的情况下:

class InTeGeR
{
    Public:
           int i=3;
           InTeGeR()
            {
                i=5;
            }
            //now, i could be 3 or 5. Which one? 
            int j=i+1;
            //is j 4 or 6? Very confusing
 }
于 2012-08-23T18:51:20.900 回答
0

正如评论中所说,在 C++11 中,你实际上可以像你展示的那样做。然而,它在 C++98/C++03 中仍然是非法的。

编辑:但是要回答你的问题:我不知道:p 也许语言设计者认为在发布 C++98 时没有人愿意这样做。无论如何,您现在当然可以使用 C++11 做到这一点。

于 2012-08-23T18:58:44.063 回答