0

如果我有这两个构造函数MyClass

MyClass(int n1);
MyClass(int n1, int n2);

和一个重载(非成员)operator+

MyClass operator+(MyClass m1, const MyClass& m2);

这使我能够编写如下代码:

MyClass m;
5 + m:

我猜它通过定义的构造函数使用隐式转换,对吗?

有什么办法可以通过构造函数采用 2 个参数来进行这种隐式转换?代码看起来像这样:

MyClass m;
{15, 8} + m:

?

或者也许只是从 {9, 4} 到一个MyClass对象的显式转换?

4

3 回答 3

5

一句话,没有。最简洁的选项是MyClass(15,8) + m;.

于 2010-09-29T22:04:21.900 回答
1

不,但您可以就地构建:

MyClass m;
m + MyClass(15,8);
于 2010-09-29T22:05:06.300 回答
0

我不这么认为,但是为什么你需要它是隐含的而不是显式的呢?如果您无论如何都必须使用括号表示法,那么它不是可以从单个变量生成的东西,所以我认为简单地说:

myclass(15, 8) + m;

这将在堆栈上生成它,并产生与隐式强制转换相同的结果。

于 2010-09-29T22:05:41.667 回答