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

时间:2011-04-29 21:08:19

标签: 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;
}

此代码在visual studio中编译并打印10。但是在强制转换操作符旁边的wikipedia中,我发现了这句话:Note: for user-defined conversions, the return type implicitly and 必然 matches the operator name.

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

2 个答案:

答案 0 :(得分:6)

operator A()是用户定义的转换运算符。当您将A投射到B时,它的作用是返回A个按值。

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

修改

当wiki说转换运算符“隐式”返回A时,这意味着您不必在函数声明中指定返回类型。它始终是A,你无能为力。

当wiki说它“必然”返回A时,它意味着除了A之外它不会返回任何内容。它甚至无法返回任何可转换为A的内容。它必须完全返回A

答案 1 :(得分:1)

B::operator A()隐式返回A。因此,return 10隐含等同于return (A)10return A(10)