构造函数有一个,默认参数

问题描述 投票:1回答:5

我搜索但找不到答案。

所以我有我的c ++构造函数:

MyClass(string username = "something");

请注意,这是我唯一的构造函数。

在我的主要,我做:

MyClass one();
MyClass two = MyClass();

这两个表达式是等价的吗?编译器是用默认字符串调用我的构造函数,还是要调用默认(空)构造函数?

如果我有一个构造函数MyClass(),会有什么变化; ?我想那不会编译,对吧?

c++ constructor default-value default-constructor
5个回答
3
投票

MyClass one();

这声明了一个函数one返回一个MyClass对象并且不带参数。

如果你有默认构造函数(形式为qazxsw poi)和默认参数构造函数(形式为qazxsw poi),如果你没有传递任何参数,那么会调用哪一个?

例如,这不会编译

MyClass()

2
投票
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(); 将调用相同的构造函数,这恰好是您的构造函数,它恰好是唯一的构造函数。


0
投票

它会调用你的构造函数。如果您自己定义构造函数 - 任何构造函数,无论参数的数量 - 编译器都不会生成默认构造函数。

[编辑]正如Prasoon Saurav所说,one声明了一个功能。你想要two,注意:没有括号。


0
投票

表达式具有相同的净效果,但并不完全等效。第一个在MyClass one();上调用你的构造函数。第二个构造一个临时的,然后将它分配给MyClass one;,从而调用类的复制构造函数。


0
投票

这两个表达式是等价的吗?

他们并不等同。

MyClass one();

它是函数one(),返回MyClass。

如果你想声明MyClass的对象,它应该是:

MyClass一个;

要么

MyClass one = MyClass();

提问:

编译器是用默认字符串调用我的构造函数,还是要调用默认(空)构造函数?

如果你声明自己的构造函数,编译器永远不会生成默认构造函数,那么现在就没有默认的构造函数。例如:

one
© www.soinside.com 2019 - 2024. All rights reserved.