我正在看这个answer并希望使用。但是,在使用static_cast
和const_cast
时,我遇到了分段错误,但如果我使用临时变量,一切都很好。很明显,因为bar()
的非const版本称它为自我过度。但我虽然static_cast
会产生const foo*
,然后选择bar()
的常量版本。为什么会这样?
#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;
}
答案 0 :(得分:5)
decltype(this)
是foo*
。 const decltype(this)
是foo* const
。
你不会改变pinte-cv-qualifications,只改变指针。因此,每次都选择非常量过载。