2013-10-16 13 views
7

假設我定義的隱式轉換功能,對自己說:隱式轉換函數會自動調用嗎?

#include <iostream> 

class Foo { 
public: 
    operator Foo() { 
    std::cout << "wha??\n"; 
    return Foo(); 
    } 
}; 

void f(Foo f) {} 

int main() { 
    Foo foo; 
    f(foo); 
} 

我爲什麼要定義這個?那麼我不會直接寫它,但它可以通過我正在寫的模板類中的模板實例化來實現。如果發生這種情況,我希望定義轉換函數實際上是無效的,並且不可能實際調用。

上面的程序沒有打印任何東西(這很棒)。有沒有什麼情況下這個轉換函數實際上會被調用?

+0

哎呀!這是一個錯字。固定。 –

回答

11

這是正確的,但絕不會被調用,由於n3376 12.3.2/1

甲 轉換功能從未用於轉換(可能CV-合格)對象(可能CV-合格) 相同的對象類型(或對其的引用)

+0

+1。 – Nawaz