为什么const_cast(或static_cast)不添加const



我正在看这个答案,并想使用。然而,当使用static_castconst_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重载

最新更新