C++中关于string类型究竟能不能用cout输出的问题(转载https://www.cnblogs.com/mzct123/p/4876185.html)
2018-03-09 20:45
681 查看
先让我讲下故事哈
一次在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中的。
例:
当编译这个程序时,会出现这样的如上的error,而如果把上面的头文件改为#include<string>时,error就会消失。
而在MFC中或你包含的是CString头文件,如果想用cout输出string 类型,则需要先把string类型转换char*型,如上面例子:
*关于将string转为char*,详情请见http://blog.sina.com.cn/s/blog_786ce14d01014lpr.html
一次在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中的。
例:
1 #include<iostream> 2 #include<CString> 3 //#include<string.h> 4 5 using std::cout; 6 using std::string ; 7 using std::endl; 8 9 main() 10 { 11 string a; 13 a="*******"; 15 4000 cout<<a<<endl; 16 }
当编译这个程序时,会出现这样的如上的error,而如果把上面的头文件改为#include<string>时,error就会消失。
而在MFC中或你包含的是CString头文件,如果想用cout输出string 类型,则需要先把string类型转换char*型,如上面例子:
1 #include<iostream> 2 #include<CString> 3 4 using std::cout; 5 using std::string ; 6 using std::endl; 7 8 main() 9 { 10 string a; 11 a="*******"; 12 char* b=(char*)a.c_str(); //将string类型转为char* 13 cout<<b<<endl; 14 }
*关于将string转为char*,详情请见http://blog.sina.com.cn/s/blog_786ce14d01014lpr.html
相关文章推荐
- C++中关于string类型究竟能不能用cout输出的问题
- C++中关于string类型究竟能不能用cout输出的问题
- C++中cout输出字符型指针地址值的方法 http://www.cnblogs.com/wxxweb/archive/2011/05/20/2052256.html
- string 引用 值类型(转自:http://www.cnblogs.com/axyz/archive/2010/11/17/1880083.html)
- IntelliJ IDEA2017 修改缓存文件的路径(转载:https://www.cnblogs.com/acm-bingzi/p/ideaCachePath.html)
- 关于ResolveClientUrl和ResolveUrl的使用 问题 (http://www.cnblogs.com/borllor/archive/2008/02/25/1081037.html)
- SQL where 1=1 和0=1 的作用(转载自:https://www.cnblogs.com/junyuz/archive/2011/03/10/1979646.html)
- 转载:C++设计模式之Bridge模式 http://www.cnblogs.com/chain2012/archive/2011/01/17/1937528.html
- 转载:C++设计模式之Observer(观察者)模式 http://www.cnblogs.com/chain2012/archive/2011/01/24/1943322.html
- 关于c++能否使用cout输出string类型
- 转载String分析 (http://www.cnblogs.com/fancydeepin/archive/2013/04/22/min-snail-speak_String.html)
- String.Trim()真相大揭秘(转:http://www.cnblogs.com/breezewoo/archive/2010/01/13/string_trim.html)
- SQL Server数据库服务器高性能设置(转载http://www.cnblogs.com/gaizai/archive/2010/11/16/1878349.html)
- CClientDC 和CPaintDC (转载于:http://www.cnblogs.com/cutepig/archive/2009/01/19/1378550.html)
- C#正则表达式整理备忘 转载(http://www.cnblogs.com/KissKnife/archive/2008/03/23/1118423.html)
- 在Asp.net MVC中使用Asp.net Ajax --转载http://www.cnblogs.com/Nimeux/archive/2008/08/17/1269907.html
- http://www.cnblogs.com/lovenets/archive/2006/06/24/434880.html 转载
- SharePoint 中 MasterPage 里面所有占位符列表(转载http://www.cnblogs.com/WinYoung/archive/2007/06/25/791766.html)
- 收集关于scrollTop信息 http://www.cnblogs.com/FrameWork/archive/2007/04/13/712750.html
- 资产和幸福感 转载自:http://www.cnblogs.com/JimmyZhang/archive/2009/08/11/1543312.html