2

我想将我的课程转换为双精度值。这可以通过重载来实现,operator double()但这允许隐式转换,理想情况下我希望能够避免。

有什么方法可以添加此功能,但要求使用double y = static_cast<double>(x)而不是隐式进行转换;double y = x?

我正在使用 C++17。谢谢

4

2 回答 2

2

是的,您可以从 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);
于 2017-11-02T21:46:16.080 回答
1

使用explicit

struct X {
    explicit operator double() const { return 3.14; }
};

double y = static_cast<double>(X{}); // ok;
double z = X{}; // error
于 2017-11-02T21:46:25.997 回答