类型转换操作符的特定事物

Mih*_*yan 3 c++ operator-overloading

#include <iostream>
using namespace std;

struct A
{
    A(int a):a(a){}
    int a;
};

struct B
{
    operator A()
    {
        return 10;
    }
};

int main()
{
    B b;
    cout << ((A)b).a << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码10在visual studio中编译和打印.但是在维基百科旁边的演员我发现了这句话:Note: for user-defined conversions, the return type implicitly and 必然 matches the operator name.

现在上面的代码如何工作?这是visual studio的这个功能吗?或者它只是隐含地匹配?

Joh*_*ing 6

operator A()是用户定义的转换运算符.它的工作是A在你投射B到一个时返回一个按值A.

你的operator A()函数返回一个文字整数值,10.但是operator A需要返回一个A,所以A用值来调用转换构造函数10.这导致临时A构建.然后,您将访问.a此临时对象,并将.ain 的值插入到流中,这将导致您10在屏幕上看到.

编辑

当wiki表示转换操作符"隐式"返回时A,这意味着您不必在函数声明中指定返回类型.它始终是一个A,你无能为力.

当wiki说它"必然"返回时,A它意味着它不能返回任何东西,只有一个A.它甚至无法返回任何可兑换的东西A.它必须A准确地返回.