要求通过 static_cast<double>(x) 显式调用 operator double()
Require operator double() to be explicitly called via static_cast<double>(x)
我想启用将我的 class 转换为双精度值。这可以通过重载 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
我想启用将我的 class 转换为双精度值。这可以通过重载 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