我的书中有以下声明:
如果我们为类提供了任何构造函数,是否为
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 ++代码共享选项?
答案 0 :(得分: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 */
答案 1 :(得分:0)
在C ++ 03中,为了对对象进行值初始化,您需要使用等号:
imminent gilfray = imminent();
在C ++ 11中,imminent gilfray()
仍然声明一个函数不带参数返回imminent
。但是,您可以改用大括号。
imminent gilfray{}; // compiler error