Я смотрел на это answer и хотел использовать. Однако я получаю ошибку сегментации при использовании static_cast
и const_cast
, но если я использую временную переменную, все в порядке. Это, очевидно, потому, что неконстантная версия bar()
называет ее самонастраивающейся. Но я, хотя static_cast
приведет к const foo*
, а затем выберем версию const bar()
. Почему это так?Почему 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, удалите прокомментированные строки. Он будет recurse forever – StoryTeller
'this' является указателем, поэтому он имеет тип' foo * '. Когда вы добавляете константу в 'foo *', вы получаете 'foo * const', а не' foo const * ', как вы могли ожидать. – ach