为什么const_cast(或static_cast)不添加const
Why does a const_cast (or static_cast) not add const?
我正在看这个答案,并想使用。然而,当使用static_cast
和const_cast
时,我得到一个分段错误,但如果我使用一个临时变量,一切都很好。很明显,这是因为bar()
的非const版本反复调用自己。但我认为static_cast
会导致const foo*
,然后选择bar()
的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;
}
decltype(this)
是foo*
。const decltype(this)
是foo* const
。
你不能改变指针,只能改变指针。因此每次都选择非const重载