码迷,mamicode.com
首页 > 编程语言 > 详细

C++中关于string类型究竟能不能用cout输出的问题

时间:2015-10-14 00:25:55      阅读:421      评论:0      收藏:0      [点我收藏+]

标签:

先让我讲下故事哈

一次在MFC中用cout输出一个string类型字符串,编译时出现这样一个错误:

error C2679: binary ‘<<‘ : no operator defined which takes a right-hand operand of type ‘class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >‘ (or there is 

no acceptable conversion)

以后我记住了C++中不能用cout输出string,所以我尽量避免,若用到string类型输出,则先将string转为char*,但今晚敲代码时突然碰到string可以用cout输出,所以再次做下概述,不过一下内容大都是网上的,仅供参考。

答案:首先得说这个问题的答案是肯定的,cout重载了string类型,所以在c++ 中可以直接输出。

先来看CString、string和string.h这几个区别:

CSting:CString是MFC或者ATL中的实现,是MFC里面封装的一个关于字符串处理的功能很强大的类,只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的string类了。在MFC中使用不需要自己加,但在另外的程序中需要加入#include<CString>。

string:string类既是一个标准c++的类库,同时也是STL(Standard Template Library,标准模版库)中的类库,已经纳入C++标准之中。它和CString有本质的区别。

string.h:C语言里面关于字符数组的函数定义的头文件,常用函数有strlen、strcmp、strcpy等等,这个头文件跟C++的string类半点关系也没有,所以 <string>并非 <string.h>的“升级版本”,他们是毫无关系的两个头文件。

 

综上,cout函数重载的是string类库中的string类型,而不是CString或string.h中的。

例:

#include<iostream>

#include<CString>

//#include<string.h>

 

using std::cout;

using std::string ;

using std::endl;

 

main()

{

string a;

a="*******";

cout<<a<<endl;

 

}

当编译这个程序时,会出现这样的如上的error,而如果把上面的头文件改为#include<string>时,error就会消失。

 

而在MFC中或你包含的是CString头文件,如果想用cout输出string 类型,则需要先把string类型转换char*型,如上面例子:

#include<iostream>

#include<CString>

 

using std::cout;

using std::string ;

using std::endl;

 

main()

{

string a;

a="*******";

   char* b=(char*)a.c_str(); //将string类型转为char*

cout<<b<<endl;

}

  • *关于将string转为char*,详情请见http://blog.sina.com.cn/s/blog_786ce14d01014lpr.html

需要注意的是,在C++中如果包含了<string>或<CString>头文件,则程序中不用在包含<string.h>就可以使用strlen、strcmp、strcpy等函数,但需要先将string类型转为char*:

#include<iostream>

#include<string>

 

using std::cout;

using std::string ;

using std::endl;

 

main()

{

string a;

   char b[10];

a="*******";

char* c=(char*)a.c_str();

strcmp(b,c);

cout<<b<<endl;

}

C++中关于string类型究竟能不能用cout输出的问题

标签:

原文地址:http://www.cnblogs.com/mzct123/p/4876185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!