2013-03-17 54 views
2

我是從//構建,其中香草薩特表明明確的變換關鍵字的益處的代碼片段觀看視頻:編譯器如何隱式執行此轉換?

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

他與該關鍵字說,我們可以防止這種編譯:

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

我真的不明白,showcase是如何編譯的?編譯器如何進行轉換?以什麼類型?

+1

ptr轉換爲一個bool,它是一個整型,可以相乘。 – 2013-03-17 06:32:55

+0

的確如此。謝謝! – Archer 2013-03-17 06:41:24

回答

1

它隱含地從unique_ptr轉換爲bool,然後從bool轉換爲int來執行乘法。

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