gpt4 book ai didi

c++ - 什么时候使用转换运算符?

转载 作者:行者123 更新时间:2023-11-28 03:46:29 26 4
gpt4 key购买 nike

考虑以下示例,行 int a = objT + 5; 给出了以两种方式处理的模棱两可的转换,使用我认为不必要的显式转换并替换使用转换运算符与成员函数代替。在这里,我的问题是您是否仍应使用转换运算符?

class Testable {

public:
Testable(int val = 0):x(val){}

operator int() const { return x; }
operator double() const { return x; }

int toInt() { return x; }
double toDouble() { return x; }

private:
int x;
};

int main()
{
Testable objT(10);

// ambiguous conversion
int a = objT + 5;

// why to use explicit cast when
// the conversion operator is for to handle
// this automatically
int b = static_cast<int>(objT) + 5;

// member functions
int c = objT.toInt() + 5;
}

最佳答案

请注意 int d = objT;double e = objT; 一样是明确的左侧的类型和这些转换运算符的返回类型。

objT + 5 的不明确转换结果(另请注意:long f = objT; 也是不明确的)。问题是您已经带走了编译器无意识地执行消歧所需的基本信息。

如果您摆脱其中任何一个转换运算符,问题就会消失。由于底层数据成员是 int,我建议去掉 operator double()

关于c++ - 什么时候使用转换运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7465520/

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