我有兩個QSharedPointer,我可以檢查他們是否使用==操作符這樣檢查兩個QSharedPointer具有相同的數據
QSharedPointer1 == QSharedPointer2
或指向同一個對象,我必須寫
QSharedPointer1.data() == QSharedPointer2.data()
存儲在指針中的對象已經重載了運算符==。
我有兩個QSharedPointer,我可以檢查他們是否使用==操作符這樣檢查兩個QSharedPointer具有相同的數據
QSharedPointer1 == QSharedPointer2
或指向同一個對象,我必須寫
QSharedPointer1.data() == QSharedPointer2.data()
存儲在指針中的對象已經重載了運算符==。
從QSharedPointer class reference:
bool operator==(const QSharedPointer<T>& ptr1, const QSharedPointer<X>& ptr2)
返回true,如果由PTR1引用的指針是一樣的指針,通過引用PTR2。
第一個版本應該確定有關here
bool operator== (const QSharedPointer<T> & ptr1, const QSharedPointer<X> & ptr2)
返回true如果通過 PTR1引用的指針是一樣的指針,通過引用PTR2。
你應該使用operator==
:
布爾運算符==(const的QSharedPointer & PTR1,常量QSharedPointer & PTR2)
返回true如果通過 PTR1引用的指針是一樣的指針與ptr2引用的一樣。如果ptr2的 模板參數與ptr1不同,則QSharedPointer將嘗試執行自動static_cast以確保所比較的指針相等。如果ptr2的模板參數不是 ptr1的基類或派生類型,則會出現編譯器錯誤。
因此,沒有必要通過data()
方法來獲取指針,它+會嘗試做static_cast
相匹配的模板參數。
此外,請注意,存儲在指針中的對象是否已超載operator==
- 您只是在此比較指針,而operator==
是針對指針類型定義的。如果要比較哪個指針所指的對象,您需要取消引用指針和比較的對象引用(這將調用T::operator==
法):
if(*ptr1 == *ptr2)
// ...
或者說,我沒有注意到「相關的非成員」。真是太遺憾了......謝謝 – Littlebitter 2013-02-14 16:27:57