我想将我的课程转换为双精度值。这可以通过重载来实现,operator double()
但这允许隐式转换,理想情况下我希望能够避免。
有什么方法可以添加此功能,但要求使用double y = static_cast<double>(x)
而不是隐式进行转换;double y = x
?
我正在使用 C++17。谢谢
我想将我的课程转换为双精度值。这可以通过重载来实现,operator double()
但这允许隐式转换,理想情况下我希望能够避免。
有什么方法可以添加此功能,但要求使用double y = static_cast<double>(x)
而不是隐式进行转换;double y = x
?
我正在使用 C++17。谢谢
是的,您可以从 C++11 开始显式标记转换运算符。
explicit operator double() { /* ... */ }
这将防止复制初始化,例如,
double y = x;
return x; // function has double return type
f(x); // function expects double argument
同时允许显式转换,例如
double y(x);
double y = static_cast<double>(x);
使用explicit
:
struct X {
explicit operator double() const { return 3.14; }
};
double y = static_cast<double>(X{}); // ok;
double z = X{}; // error