2016-10-12 91 views
6

我有以下代碼:隱式轉換和運算符重載

struct helper { 
    template<typename T> helper(T const&); 
}; 

helper operator*(helper const&); 

struct A {}; 

int main() { 
    // (1) 
    A a; 
    sizeof(*a); 

    // (2) 
    int i; 
    sizeof(*i); 
} 

情況(1)編譯罰款和我明白它正在使用的隱式轉換到helper類型和給定的操作過載。

對於情況(2),但是,我得到一個編譯錯誤:

invalid type argument of unary '*' (have 'int') 

爲什麼用於A類型,但不int隱式轉換?

回答

8

當不涉及用戶定義類型時,任何操作員都被認爲是內置操作員。所以

helper operator*(helper const&); 

不能用於*i發現時i是內置類型(如int)。