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的这个功能吗?或者它只是隐含地匹配?
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准确地返回.
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |