我試着包裝一些類似於Qt的共享數據指針,以達到我的目的,並且在測試後,我發現當const函數應該被調用時,它的非const版本是改爲選擇。調用一個const函數而不是它的非const版本
我用的C++ 0x編譯選項,這裏是一個很小的代碼:
struct Data {
int x() const {
return 1;
}
};
template <class T>
struct container
{
container() {
ptr = new T();
}
T & operator*() {
puts("non const data ptr");
return *ptr;
}
T * operator->() {
puts("non const data ptr");
return ptr;
}
const T & operator*() const {
puts("const data ptr");
return *ptr;
}
const T * operator->() const {
puts("const data ptr");
return ptr;
}
T* ptr;
};
typedef container<Data> testType;
void testing() {
testType test;
test->x();
}
正如你所看到的,Data.x是一個const功能,使操作者 - >叫應常量之一。當我註釋掉非const函數的時候,它編譯沒有錯誤,所以它是可能的。然而,我的終端打印:
「非const的數據PTR」
它是一個GCC的bug(我有4.5.2),或者是有什麼我失蹤?
所以如果對象沒有聲明爲const,編譯器會更喜歡調用非const重載,即使它可以調用const重載? – coyotte508
@ coyotte508:正確。非'const'超載被認爲是更好的匹配。 –