c++ - 要求通过 static_cast<double>(x) 显式调用运算符 double()

标签 c++ type-conversion c++17 static-cast explicit-conversion

我想将我的类转换为 double 值。这可以通过重载 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);

关于c++ - 要求通过 static_cast<double>(x) 显式调用运算符 double(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47085095/

相关文章:

c++ - 如何将数组转换为 QByteArray?

c++ - 使用另一个类成员的类成员函数指针

c - 我收到警告 "floating point overflow "

c++ - 有条件地在类中创建成员

c++ - 如何使用 C 语言构建游戏,并使用 Lua 编程 Actor ?

c++ - 如何在我的 DLL 中调用我的 exe 中定义的函数?

c - 将函数的返回类型存储在不同类型的变量中时会发生什么?

json - 为什么 golang json number 不能像 "10"那样转换 int 或 string int?

c++ - 是否有预处理器宏来防止其他人在 C++ 中包含私有(private) header ?

xcode - 什么是 llvm/clang/xcode 的正确版本?