关于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++编程