yea*_*eah 1 c++ initialization c++11
默认构造函数不应将任何数据成员归零。但是在某些情况下,似乎并非如此。
代码示例很简短。
#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() {}
~Foo() {}
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)
或只是初始化栏对象:
class Foo {
public:
int val;
Foo() = default;
};
int main() {
Foo bar = Foo();
...
}
Run Code Online (Sandbox Code Playgroud)
输出:
false
Run Code Online (Sandbox Code Playgroud)
那么,什么原因会影响类的数据成员值?所有这些测试输出都不能使用true
吗?