上C++选修课,老师指出了一个我以前没怎么注意的问题,形如
"char * pStr="Abcd";"的语句中的pStr指向的是字符串常量,所以程序中对pStr指向的区域只能读,
不能写(如 pStr[1]='c' ;这样的操作),否则即算编译成功,也会运行失败,而且程序测试也似乎如此。
而我在《 effective c++》上
条款21: 尽可能使用const
里面有下面一句
...
char *p = "hello"; // 非const指针, 非const数据
这里是不是有问题
实践证明一切吧.如果测试都是这样的话。去这里看是否有修正:
Scott Meyers---Modification History and Errata List for Effective C++
http://www.aristeia.com/BookErrata/ec++2e-errata_frames.html
上面看的是第一版(因为是中文,方便些)
刚刚看了下 effective C++ 第三版(英文版),看来第一版的条款21: 尽可能使用const 那里的确有错误
第三版
Item 3: Use const whenever possible
在这里与一版不同,修改为了:
char greeting[] = "Hello";
char *p = greeting; // non-const pointer,
// non-const data
const char *p = greeting; // non-const pointer,
// const data
char * const p = greeting; // const pointer,
// non-const data
const char * const p = greeting; // const pointer,
// const data
看书还得看最新版 ,尽管是 英文