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

Why does a const_cast (or static_cast) not add const?

我正在看这个 answer 并且想使用。但是,在使用 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.

您不更改指针 cv 资格,只更改指针。因此每次都选择非常量重载。