const_cast with bool:如果条件被忽略

时间:2017-04-14 18:49:43

标签: c++ visual-c++ casting boolean const

VC ++ 2010问题:

const bool bNew = true;
const_cast<bool&>(bNew) = false;
if(bNew)//bNew is false here, but
{
    int i = 0;//this line will be executed
}

为什么?

谢谢。

1 个答案:

答案 0 :(得分:3)

来自C ++ 03标准的第7.1.5.1/4节:

  

除了可以修改声明为mutable(7.1.1)的任何类成员之外,任何在其生命周期内修改const对象的尝试(3.8)都会导致未定义的行为。

您将bNew声明为const对象,然后通过明确地将其转换为修改它来破坏类型系统。因此,您调用了未定义的行为,这意味着任何都可能发生。