2

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

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

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

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

实在看不懂,showcase是怎么编译的?编译器如何进行转换?到什么类型?

4

1 回答 1

1

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

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

于 2013-03-17T06:35:13.673 回答