我理解我将获得一些随机值的部分,但代码段中的Foo()
构造函数是否与编译器在没有定义构造函数时提供的默认公共构造函数一样?
#include<iostream>
using namespace std ;
class Foo{
int i ;
public:
Foo(){
}
void disp(){
cout<<"i = "<<i ;
}
};
int main(){
Foo bar1,bar2 ;
bar1.disp();
cout<<"n";
bar2.disp();
}
我见过一些人写这样一个空构造函数,但我不明白为什么/什么时候使用它?
一个用户定义的没有参数、没有ctor init列表和一个空主体的ctor的行为与默认的ctor几乎相同
不过有一点不同,它永远不算是一个微不足道的ctor
相反,像这样明确违约可以避免这种差异和随之而来的潜在性能下降:
Foo() = default; // Needs C++11
什么是";默认";平均一节课后';函数声明?
另请参阅<type_traits>
,了解检测差异的简单方法:http://en.cppreference.com/w/cpp/types/is_constructible
当您提供空构造函数的定义时,编译器不会提供默认构造函数,也不会以自己的方式初始化成员。您只是不允许编译器进行默认初始化。
每个类都需要一个空构造函数。如果您想要一个具有初始化逻辑的构造函数,可以将其与空构造函数一起添加。在某些语言中,若并没有显式地编写一个空构造函数,编译器会为您生成它。
If只是创建一个类的实例,它不做任何其他事情。
您可以用参数重载它,使其具有另一个初始化其属性的构造函数。