Ich habe mir das answer angesehen und wollte es benutzen. Allerdings bekomme ich einen Segmentierungsfehler, wenn ich die static_cast
und const_cast
verwende, aber wenn ich eine Temp-Variable verwende, ist alles in Ordnung. Es ist offensichtlich, weil die nicht-const-Version von bar()
es selbst over-and-over nennt. Aber ich würde die static_cast
in einem const foo*
führen und dann die const-Version von bar()
wählen. Warum ist das so?Warum fügt const_cast (oder static_cast) const nicht hinzu?
#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, entfernen Sie die kommentierten Zeilen. Es wird für immer rekursiv – StoryTeller
'this' ist ein Zeiger, so hat es Typ' foo * '. Wenn Sie constness zu 'foo *' hinzufügen, erhalten Sie 'foo * const', nicht' foo const * ', wie Sie vielleicht erwarten. – ach