필자는 Qt의 공유 데이터 포인터와 비슷한 것을 랩핑하려고 시도했다. 테스트 할 때 const 함수를 호출해야 할 때 비 const 버전은 선택한 대신. 내가 여기에 C + +0 옵션을 사용하여 컴파일하고있어비 const 버전이 아닌 const 함수 호출하기
는 최소한의 코드입니다 :
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 하나. 그리고 non-const one을 주석 처리하면 오류없이 컴파일되므로 가능합니다. 그러나 내 터미널 인쇄 :
"비 const를 데이터 PTR"
IT는 GCC 버그 (나는 4.5.2를)인가, 또는 거기에 내가 부족 뭔가?
그래서 const 오버로드를 호출 할 수 있다고하더라도 컴파일러는 객체가 const로 선언되지 않은 경우 non-const 과부하를 선호합니다. – coyotte508
@ coyotte508 : 정확하게. nonconst' 과부하가 더 나은 일치로 간주됩니다. –