我理解我将获得一些随机值的部分,但是代码段中的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();
}
我见过有人写过这样的空构造函数,但我无法理解为什么/何时使用它?
答案 0 :(得分:2)
没有参数的用户定义的ctor,没有ctor-init-list和空主体的行为几乎与default-ctor相同。
但是有一个区别,它不算是一个微不足道的ctor,永远!
明确地默认这样做会避免这种差异以及伴随的潜在性能下降:
Foo() = default; // Needs C++11
What does "default" mean after a class' function declaration?
另请参阅<type_traits>
以了解检测差异的简便方法:http://en.cppreference.com/w/cpp/types/is_constructible
答案 1 :(得分:0)
每个类都需要一个空构造函数。如果要使用具有初始化逻辑的构造函数,可以将其与空构造函数一起添加。在某些语言中,如果您没有显式编写空构造函数,编译器将为您生成它。
如果只是创建一个类的实例,它什么都不做。
您可以使用参数重载它以使另一个构造函数初始化其属性。
答案 2 :(得分:0)
当您提供空构造函数的定义时,编译器不提供默认构造函数并将其自己的方式初始化为成员。您只是不允许编译器执行其默认初始化。