下午好。
对何时禁止隐式转换的问题感兴趣。网上说:
C++ 标准提供了 explicit 关键字作为单参数构造函数的修饰符,因此此类构造函数不会充当隐式转换构造函数。但是,这不会以任何方式影响实际的转换运算符。例如,智能指针类可能包含一个运算符 bool() 来模拟普通指针。例如,可以这样调用这样的运算符:if(smart_ptr_variable)(如果指针不为空,则执行分支)。问题是这样的运算符不能防止其他意外转换。由于 bool 在 C++ 中被声明为算术类型,因此可以隐式转换为任何整数类型甚至浮点数类型,这反过来会导致意外的数学运算。
但是从回答中还是没明白,ban是在编译阶段或者程序运行的时候进行的(我手头没有编译器,自己查不到)。这项检查何时进行?
好吧,想一想——毕竟,类型转换的调用本身并没有生成,对吧?什么时候可以做出这样的决定?仅在编译时。
我认为答案是显而易见的...