为什么不允许在构造函数之外初始化类成员?

时间:2012-08-23 18:43:10

标签: c++

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

class Integer {
  int i = 3;
};

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

2 个答案:

答案 0 :(得分: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
 }

答案 1 :(得分:0)

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

编辑:回答你的问题:我不知道:p也许语言设计师认为在发布C ++ 98时没有人会想要这样做。无论如何,你现在可以使用C ++ 11来实现它。