对于以下字符串操作:
1、const char* tStr = "aaaaaaaa";
strcpy((char*)tStr, "dddd"); //C++ Builder6会成功,而VC将出现异常。VC中"aaaaaaaaa"放在了常量数据段;
//显然C++ Builder6不是,这点应该不符合C++标准~~~~
2、std::string tStr("aaaaaaaa");
const char* pStr = tStr.c_str();
char* pStr2 = (char*)pStr;
pStr2[5] = '9';
strcpy((char*)pStr, "dddd");
//以上操作在C++ Builder6与VC中均没有错误。说明tStr的构造是拷贝了"aaaaaaaa",而不是指向"aaaaaaaaa"。
//将const char*强制转换为char*后,对字符串的操作,没有受到转换之前的影响,也就是说const char*并
//不是把内存数据转换为常量数据,只是告诉编译器有这个约束(只是告诉程序员应该把它看成常量,
//而不是存储为常量)。也就是说,const Type* 中const是没有什么意义的,根本没有影响数据的存储。
3、char* const pStr = ...; //常指针,意义是把指针本身存放在常数据段,因而指针不可能再指向其他东西了。