小编yea*_*eah的帖子

什么会导致类中的数据成员初始化为零?

默认构造函数不应将任何数据成员归零。但是在某些情况下,似乎并非如此。

代码示例很简短。

#include <iostream>

using namespace std;

class Foo {
public:
  int val;
  Foo() = default;
};

int main() {
  Foo bar;
  if (bar.val != 0) {
    cout << "true" << endl;
  } else {
    cout << "false" << endl;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

作为例外,以上程序输出:

true
Run Code Online (Sandbox Code Playgroud)

但是,如果添加了bar数据成员的打印语句,则该var成员将被初始化为零:

...
int main() {
  Foo bar;
  cout << bar.val << endl;
  ...
}
Run Code Online (Sandbox Code Playgroud)

输出将是:

0
false
Run Code Online (Sandbox Code Playgroud)

同样,如果向类添加虚函数和析构函数Foo:

#include <iostream>

using namespace std;

class Foo {
public:
  virtual void Print() …
Run Code Online (Sandbox Code Playgroud)

c++ initialization c++11

1
推荐指数
1
解决办法
79
查看次数

标签 统计

c++ ×1

c++11 ×1

initialization ×1