编程实践char *指向const或指向const的数组

时间:2013-05-24 15:52:19

标签: c++ const

我知道以下是糟糕的编程习惯

char * p1 = "myBad"  ;  

上面的错误是const“myBad”内存被非Const指针指向。编译器允许p1支持与C

的向后兼容性

以下是一种不好的做法吗?

char p2[]="myBadORGood";

p1和p2之间的区别是什么。编译器是否为p2制作了非const副本?我想我读到的地方p2很好但不确定..

2 个答案:

答案 0 :(得分:3)

p2由字符串文字初始化,即它是字符串文字的副本,因此p2非 - const很好:< / p>

char p2[]="myGood";

答案 1 :(得分:0)

第一个不仅是糟糕的做法,而且在C ++中已弃用(C ++ 03;根据克里斯的评论,这甚至非法现在在 C + 11 )。

第二个是完全正常的,字符串文字只用作(只读)“模型”来初始化一个新的独立数组。因此,短暂

char arr[] = "abc";

相当于更长的

char arr[] = { 'a', 'b', 'c', '\0' };

甚至可以这样写:

char arr[4];
arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c';
arr[3] = '\0';

(但不要写那样的代码!^^)