C++用户定义对象之间可以禁止隐式转换。
voiddosomething(A aObject);
class A {
public:
explicit A(int x = 0);
}
dosomething(20); // ERROR 隐式转换被禁止
dosomething(static_cast<A>(20)); // OK 显式转换
被声明为explicit 的构造函数通常比non-explicit更好。
综合起来说
C++ 中应该尽量不使用转换,尽量使用显式转换来代替隐式转换,尽量不用reinterper_cast显式转换。