随笔-204  评论-149  文章-0  trackbacks-0
关于const_cast    
    const char str[] = "abc";
    char * s = const_cast<char *>(str);
    s[0] = 'A';
 
    cout<<s<<endl;    //输出Abc
但是这样就不行了:
   const char *str = "abc";
    char * s = const_cast<char *>(str);
    s[0] = 'A';
 
    cout<<s<<endl;    //编译能通过,但是执行就报错。

: const char str[] = "abc";        abc存储在堆栈中;
: const char *str = "abc";         abc存储在静态存储区;
准确的说,上面两个“abc"都是存储在静态存储区,即常量区。常量区是可读不可写的。所以任何试图对常量区进行写的操作都是非法的,当然了,这也不是一定不可写的,你可以采取某种渠道改变常量区的内存属性,比如改变pe相关节的属性就可以对常量区进行读写,当然了,这个目前可以忽略。。。
那么为什么str[] = "abc";        可以写呢?答案就在str[] = "abc";会有一个额外的拷贝过程,即把常量区的 "abc"拷贝到栈内存去,所以就可以写了。
posted on 2009-08-05 16:57 Frank_Fang 阅读(510) 评论(0)  编辑  收藏 所属分类: C++编程

只有注册用户登录后才能发表评论。


网站导航: