我搜索但找不到答案。
所以我有我的c ++构造函数:
MyClass(string username = "something");
请注意,这是我唯一的构造函数。
在我的主要,我做:
MyClass one();
MyClass two = MyClass();
这两个表达式是等价的吗?编译器是用默认字符串调用我的构造函数,还是要调用默认(空)构造函数?
如果我有一个构造函数MyClass(),会有什么变化; ?我想那不会编译,对吧?
MyClass one();
这声明了一个函数one
返回一个MyClass
对象并且不带参数。
如果你有默认构造函数(形式为qazxsw poi)和默认参数构造函数(形式为qazxsw poi),如果你没有传递任何参数,那么会调用哪一个?
例如,这不会编译
MyClass()
MyClass(string s = "string")
如果这是意思,那么class MyClass
{
public:
MyClass(std::string username = "something") {}
MyClass(){}
};
int main()
{
MyClass one();
MyClass two = MyClass(); //ambiguous call here
}
和MyClass one;
MyClass two = MyClass();
将调用相同的构造函数,这恰好是您的构造函数,它恰好是唯一的构造函数。
它会调用你的构造函数。如果您自己定义构造函数 - 任何构造函数,无论参数的数量 - 编译器都不会生成默认构造函数。
[编辑]正如Prasoon Saurav所说,one
声明了一个功能。你想要two
,注意:没有括号。
表达式具有相同的净效果,但并不完全等效。第一个在MyClass one();
上调用你的构造函数。第二个构造一个临时的,然后将它分配给MyClass one;
,从而调用类的复制构造函数。
这两个表达式是等价的吗?
他们并不等同。
MyClass one();
它是函数one(),返回MyClass。
如果你想声明MyClass的对象,它应该是:
MyClass一个;
要么
MyClass one = MyClass();
提问:
编译器是用默认字符串调用我的构造函数,还是要调用默认(空)构造函数?
如果你声明自己的构造函数,编译器永远不会生成默认构造函数,那么现在就没有默认的构造函数。例如:
one