我知道以下是不好的编程习惯
char * p1 = "myBad" ;
上述情况很糟糕,因为 const "myBad" 内存被非 Const 指针指向。编译器允许 p1 as 支持与 C 的向后兼容性
以下也是一种不好的做法吗?
char p2[]="myBadORGood";
p1 和 p2 之间有什么区别。编译器是否为 p2 制作非常量副本?我想我在某处读到 p2 很好但不确定..
p2
由字符串字面量初始化,即它是字符串字面量的副本,因此p2
非const
- 很好:
char p2[]="myGood";
第一个不仅是不好的做法,而且在 C++ 中已被弃用(C++03;根据 chris 的评论,这在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';
(但不要写那样的代码!^^)