C++ Builder6与VC 中字符串处理的区别(const)

C++ Builder6与VC 中字符串处理的区别(const)

对于以下字符串操作:
   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 = ...; //常指针,意义是把指针本身存放在常数据段,因而指针不可能再指向其他东西了。

你可能感兴趣的:(C++ Builder6与VC 中字符串处理的区别(const))