【问题标题】:2 value in one variable (const and const_cast) c++ [closed]一个变量中有2个值(const和const_cast)c ++ [关闭]
【发布时间】:2014-04-26 17:24:34
【问题描述】:
void main() {

const int a = 10;
const int *b = &a;
int *c = const_cast <int*>(b);
*c = 5;
cout<<a<<" "<<*b<<" "<<*c<<endl; //10 5 5
cout<<&a<<" "<<b<<" "<<c<<endl; //same address
cout<<*(int*)&a<<" "<<*&a<<endl; //5 10
}

是什么让类型转换影响了这一点? 值存储在哪里?

【问题讨论】:

  • 这是int main,而不是void main。修改常量数据是未定义的行为。不要期待任何事情。
  • const_cast 仅应在您知道引用的数据不是const 时使用(从不,呵呵)。 IE。如果a 不是 const,那么const_cast 使用b 指针是有价值的。正如所写,你违反了这一点。 See it live
  • 您的问题不清楚,因此很难确切知道您要查找的信息。

标签: c++ constants const-cast


【解决方案1】:

程序具有未定义的行为:使用const_cast&lt;int*&gt;(b),您可以从实际上是const 的对象中删除const 限定符,并且对该对象的赋值可能具有任意效果。

观察到的效果表明,该实现将 a 的使用替换为其不可变值,同时取消引用 b 以确定该值。不过,它也可能具有任意其他效果。例如,尝试写入写保护位置时可能会出现分段错误。好吧,任何事情都有可能发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2018-03-09
    • 2016-12-15
    相关资源
    最近更新 更多