2014-11-24 31 views
0

我在我的书下面的语句:

编译器何时不创建默认构造函数?

如果我们给予任何构造了一类无论是

1.我们自己explcit默认构造函数(即无参数或具有默认 参数值)

2.我们自己的构造函数的参数
那么编译器不会产生隐含的默认构造要么。

但我对第2点有怀疑,我怀疑我的书籍ID不正确或过时,因为我的下面的代码确实有一个带参数的构造函数,但编译器也在生成内部构造函数。

#include <iostream> 

class imminent{ 
    public: 
    imminent(int x, int y){ 
    std::cout << "I am explicit constructor" << std::endl; 
    } 
}; 

int main(){ 
    imminent gilfray(); /* compiler creates internal default constructor 
          that why this line is compiled without errors*/ 

    imminent jimmy(1, 2); 
} 

而且,我怎样才能把我的C++代码在这里,因为这一次我是被迫的代码片段用JS真正的出路,是不是有任何的C++代码共享选项?

+7

看看最烦人的解析:http://en.wikipedia.org/wiki/Most_vexing_parse。 '即将gilfray();'是一个函数返回'迫在眉睫' – 2014-11-24 18:19:41

回答

0
imminent gilfray(); 

我相信你打算这行来声明一个变量gilfray,与imminent类型。

但是,它没有。
相反,它声明了函数gilfray,没有参数,返回类型为imminent

此代码中未使用默认构造函数。

您可以通过尝试实际使用它来验证gilfray不是变量。

gilfray.DoSomething(); // Likely a linker error: "Undefined function gilfray." 

如果您想尝试使用一个默认的构造函数,它会看起来像:

imminent gilfray; /* Create variable gilfray, with default ctor */ 
+0

OMG!那么这意味着我不能用gilfray来调用即将发生的数据记忆(如果有的话)? – 2014-11-24 18:29:02

0

在C++ 03,以值初始化的对象,你需要使用一个等号:

imminent gilfray = imminent(); 

在C++ 11,imminent gilfray()还声明了一个函数采取任何参数,返回一个imminent。但是,您可以使用大括号代替。

imminent gilfray{}; // compiler error 
相关问题