2014-02-26 63 views
1

我有一個模板類,看起來像:如何使轉換操作符返回參考和非參考

template<class T> 
class A 
{ 
    public: 
    operator T() const { return value;} 
    operator T&() { return value;} 

    private: 
     T value; 

} 

看來,operatorT()const的永遠不會被調用。即使是在這樣的

const int a = myA; 

其中MYA是A. 的實例聲明中有什麼問題,與上面的代碼失蹤?

+0

與你的問題沒有直接關係,但我認爲這可能是一個不好的做法。更好的辦法是讓'operator T()const'返回'const T&',或者讓兩個操作符返回'T'。 'const'對象不應該與非''contst'對象具有不同的語義*,除非*它們不能被修改。 – Brian

+0

'&&'另一方面應該返回'T'或'T &&'。 – Yakk

回答

4

只有當您定義類型爲const A<T>的對象時,該運算符纔會生效。例如:

const A<int> myA; 
int someInt = myA; 

將調用operator T() const

而且,因爲它當然是真的 - 就像Benjamin Lindley指出的那樣 - 如果您通過const引用訪問該對象。

+3

或者如果你通過const引用訪問對象。 –