我遇到了一个奇怪的情况,编译器选择强制转换结构,即使有一个非常好的构造函数接收结构类型。
一个小例子:
struct A
{
operator int() {return 1;}
};
struct B
{
B(A& a) { OutputDebugStringA("A constructor\n"); }
B(int i) { OutputDebugStringA("int constructor\n"); }
};
A test () { A a; return a;};
int _tmain(int argc, _TCHAR* argv[])
{
B b(test());
return 0;
}
解释:A有一个转换为 int 的运算符。B有2 个重载的构造函数,一个接受A 引用,一个接受int。
函数test()返回一个 A 对象。
出于某种原因,编译器决定将返回值转换为 int,并使用接受 int 的构造函数。int constructor
谁能解释为什么会这样?我有一些理论,但我想要一个基于真实事物的答案(也许是标准的引用)。
注意:
我可以通过将构造函数签名更改为: B(const A& a)
或 B(A&& a)