const_cast比普通演员更安全吗?

Gre*_*lin 3 c++

哪个更安全?

int main()
{
    const int i=5;
    int *ptr;
    ptr=(int*)&i; <------------------- first

    ptr=const_cast<int*>(&i); <-------------------Second
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*urr 8

从某种意义上讲,它更安全,你不会获得除了删除之外的其他东西const:

int main()
{
    const char i=5;
    int *ptr;
    ptr=(int*)&i;  // the compiler won't complain

    ptr=const_cast<int*>(&i); // will fail, since `i` isn't an int
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这不一定意味着const_cast<>安全:

const int i=5;

int main()
{
    int const& cri(i);

    int& ri = const_cast<int&>(cri);  // unsafe

    ri = 0; // will likely crash;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)