이 answer을보고 사용하고 싶습니다. 그러나, static_cast
및 const_cast
을 사용할 때 세분화 오류가 발생하지만 임시 변수를 사용하면 문제가 없습니다. 그것은 분명히 bar()
의 non-const 버전이 자체 over-and-over라고 부르기 때문입니다. 하지만 static_cast
은 const foo*
이되고 bar()
의 const 버전을 선택합니다. 왜 이렇게이다?const_cast (또는 static_cast)가 const를 추가하지 않는 이유는 무엇입니까?
#include <iostream>
using namespace std;
class foo
{
public:
void bar() const
{
cout << "const" << endl;
}
void bar()
{
cout << "non-const" << endl;
// static_cast<const decltype(this)>(this)->bar();
// const_cast<const decltype(this)>(this)->bar();
const auto& tmp = *this;
tmp.bar();
}
};
int main() {
foo A;
A.bar();
const foo B;
B.bar();
static_cast<const foo*>(&A)->bar();
return 0;
}
@songyuanyao, 주석 처리 된 행을 제거하십시오. 영원히 되풀이됩니다. – StoryTeller
'this'는 포인터이므로,'foo *'타입을가집니다. const를'foo *'에 추가하면 예상대로'foo const *'가 아닌'foo * const'가됩니다. – ach