免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1633 | 回复: 7
打印 上一主题 下一主题

const 疑问 [复制链接]

论坛徽章:
3
数据库技术版块每日发帖之星
日期:2016-05-27 06:20:00数据库技术版块每日发帖之星
日期:2016-06-04 06:20:00数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-20 16:30 |只看该作者 |倒序浏览
#include<iostream>
#include <string>
using std::cout;
using std::endl;
using std::cin;
using std::string;
int main()
{
  string mystr1("TEST");
  const char *ptr;    //请问大家这里为什么一定要定义成const才行呢?去掉const 就编译通不过.
   ptr = mystr1.c_str();
  cout<<ptr<<endl;
  cin.get();
}

论坛徽章:
0
2 [报告]
发表于 2010-04-20 16:46 |只看该作者
const _charT* c_str() const{return _M_data();};
这是我的gcc4.1.2中c_str()的定义(这是从预处理后的文件中找的);

论坛徽章:
0
3 [报告]
发表于 2010-04-20 16:48 |只看该作者
否则,就可以通过ptr改变对象mystr1的状态(字符串的内容),那就不叫面向对象了。
而且,c_str()返回值本来就是const char *的。

论坛徽章:
0
4 [报告]
发表于 2010-04-20 16:52 |只看该作者
是龟腚吗?

论坛徽章:
0
5 [报告]
发表于 2010-04-20 17:01 |只看该作者
强制转换:
char *ptr;   
   ptr = (char*)mystr1.c_str();

论坛徽章:
0
6 [报告]
发表于 2010-04-20 17:01 |只看该作者
不过这样做,要小心,ptr指向的内容就能修改了,易崩溃

论坛徽章:
0
7 [报告]
发表于 2010-04-20 17:14 |只看该作者
人家返回的就是 const , 你不con,编译器不干。

需要强制转换的时候,使用const_cast<>

论坛徽章:
0
8 [报告]
发表于 2010-04-20 17:37 |只看该作者
string c_str()和 data() 都返回的是 const char *
const_cast<>还是少用的好,除了写写php扩展的时候会用点。否则可能说明接口设计的有问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP