c ++中的空构造函数

时间:2014-09-16 15:52:22

标签: c++ constructor initialization default-constructor

我理解我将获得一些随机值的部分,但是代码段中的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();
}

我见过有人写过这样的空构造函数,但我无法理解为什么/何时使用它?

3 个答案:

答案 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)

当您提供空构造函数的定义时,编译器不提供默认构造函数并将其自己的方式初始化为成员。您只是不允许编译器执行其默认初始化。