我正在观看来自// build的视频,其中Herb Sutter使用代码段显示了显式转换关键字的好处:
template< /* ... */ > class unique_ptr {
public:
// ...
explicit operator bool() const { return get() != nullptr; }
他用那个关键字说,我们可以阻止这个编译:
use(ptr * 42); // oops, meant *(ptr) * 42
我真的无法得到它,展示如何编译?编译器如何进行转换?到什么类型?
答案 0 :(得分:1)
它隐式地从unique_ptr
转换为bool,然后从bool转换为int来进行乘法运算。
(bool to int表示true为1,false为0)