编译器如何隐式进行此转换?

时间:2013-03-17 06:30:49

标签: c++ implicit-conversion

我正在观看来自// build的视频,其中Herb Sutter使用代码段显示了显式转换关键字的好处:

template< /* ... */ > class unique_ptr {
public:
    // ...
    explicit operator bool() const { return get() != nullptr; }

他用那个关键字说,我们可以阻止这个编译:

use(ptr * 42); // oops, meant *(ptr) * 42

我真的无法得到它,展示如何编译?编译器如何进行转换?到什么类型?

1 个答案:

答案 0 :(得分:1)

它隐式地从unique_ptr转换为bool,然后从bool转换为int来进行乘法运算。

(bool to int表示true为1,false为0)