gpt4 book ai didi

c++ - 类型转换运算符的特定事物

转载 作者:太空狗 更新时间:2023-10-29 20:17:49 27 4
gpt4 key购买 nike

#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在转换运算符旁边我发现了这句话:注意:对于用户定义的转换,返回类型隐式地和 necessarily 匹配运算符名称。

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

最佳答案

operator A() 是用户定义的转换运算符。它的工作是在将 B 转换为 A 时按值返回 A

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

编辑

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

当 wiki 说它“necesarrily”返回一个 A 时,这意味着它只能返回一个 A。它甚至无法返回任何可转换为 A 的内容。它必须准确地返回一个 A

关于c++ - 类型转换运算符的特定事物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5837419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com