我知道拋棄const
應該小心謹慎,並且任何嘗試從最初的const
對象中刪除const
對象,然後修改對象會導致未定義的行爲。如果我們想要刪除const
-ness,那麼我們可以調用一個不會修改對象的非const函數呢?我知道我們實際上應該標記這樣的功能const
,但假設我使用的「壞」代碼沒有const
版本可用。通過const_cast刪除const並調用一個不修改結果對象的非const函數是否安全?
因此,總結一下,下面的代碼是「安全的」?我的猜測是,只要你不修改對象就沒問題,但我不是100%確定的。
#include <iostream>
struct Foo
{
void f() // doesn't modify the instance, although is not marked const
{
std::cout << "Foo::f()" << std::endl;
}
};
int main()
{
const Foo foo;
const_cast<Foo&>(foo).f(); // is this safe?
}
無論標準允許的事實如已回答,我會說它既不安全也不好。 – hvd
@ hvd爲什麼只讀操作不安全? – Barry
@Barry這不是重點。該成員函數可以稍後修改,以便意外調用UB。 – Columbo