正在想如何修改13诫之4所以去看C跟C++对于字串常数的定义:
http://en.cppreference.com/w/c/language/string_literal
http://en.cppreference.com/w/cpp/language/string_literal
对C来说:
字串常数定义是这样做(举例):
char *a = "bla";
这个动作会新增一个内含元素为"bla\0"的static char[4],
然后a会指向这个static char的位址。
至于
char b[] = "abc";
这动作会在&b处新增一个内含"abc\0"的char[4]。
要是试图去更改 a指向的static char ,结果会是undefined behavoir。
(我在gcc试过,还真的可以改)
但是b的元素是可以改的。
对于C++来说:字串常数是 const char[]。
const char* pc = "Hello"; // 字串常数
char* c = "Kitty"; // C++03似乎也允许把这当字串常数。C++11我就不知了
至于修改字串常数(要先把它的const cast掉),一样是undefined behavior
const char* pc = "Hello";
char* p = const_cast<char*>(pc);
p[0] = 'M'; // undefined behaviour