例如如下:

	map<const char*, const char*> map_test;
map_test["a"] = "a";
map_test["a"] = "a";
map_test["a"] = "a";

实际上会将三个"a"插入到map中,因为三个key的指针不同,所以被认为是三个不同的key。而如果改为如下用法:

	map<string, string> map_test;
map_test["a"] = "a";
map_test["a"] = "a";
map_test["a"] = "a";

编译器自动加入char* -> string的函数,而string重载了==操作符函数,内部的判断不是判断指针是否相等,而是判断字符串是否相等,这样一来,实际上只会有一个"a"插入到map中。

实际上用string的好处还有很多,例如它内部封装好了大部分常用字符串操作函数,更重要的是支持类似如下的方法:

	string a = "a";
string b = "b";
string c = a + b;

这次写成文章是为了提醒自己,最近在重写cocos2d-x的部分实现时,遇到了我第一个例子的问题,算是很简单的基础问题吧(羞愧~),以后会尽量用string来代替char *(在不需要十分严格考虑性能的情况下)。

为什么推荐std::string而不是char*的更多相关文章

  1. std::string stringf(const char* format, ...)

    std::string stringf(const char* format, ...){ va_list arg_list; va_start(arg_list, format); // SUSv2 ...

  2. How to convert a std::string to const char* or char*?

    How to convert a std::string to const char* or char*? 1. If you just want to pass a std::string to a ...

  3. QString, Std::string, char *相互转换

    Qt 库中对字符串类型进行了封装,QString 类提供了所有字符串操作方法,给开发带来了便利. 由于第三方库的类型基本上都是标准的类型,即使用std::string或char *来表示字符 (串) ...

  4. C++ std::unordered_map使用std::string和char *作key对比

    最近在给自己的服务器框架加上统计信息,其中一项就是统计创建的对象数,以及当前还存在的对象数,那么自然以对象名字作key.但写着写着,忽然纠结是用std::string还是const char *作ke ...

  5. std::string与char*之临时缓冲区

    std::string与char*之临时缓冲区 原文:https://blog.csdn.net/hsshh1988/article/details/80689330 c++文件读取流程如下: ifs ...

  6. 推荐使用string

    C-string(char* const char*) basic_string<>特化版本:string charwstring wchar_tu16string char16_tu32 ...

  7. C++不存在从std::string转换为LPCWSTR的适当函数

    LPCWSTR是什么类型呢? 看看如何定义的: typedef const wchar_t* LPCWSTR; 顾名思义就是: LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符 ...

  8. 类型安全且自动管理内存的返回 std::string 的 sprintf 实现

    在这篇博文里,我提到了一个例子,说的是使用C++实现类型安全的printf.这个例子很惊艳,但是在我写程序的时候,并非那么"迫切"地需要它出现在我的工具箱中,因为它并不比普通的pr ...

  9. VC++ 中使用 std::string 转换字符串编码

    目录 第1章说明    1 1.1 代码    1 1.2 使用    4 第1章说明 VC++中宽窄字符串的相互转换比较麻烦,借助std::string能大大减少代码量. 1.1 代码 函数声明如下 ...

随机推荐

  1. C#分析URL参数获取参数和值得对应列表

    原文: C#分析URL参数获取参数和值得对应列表 /// <summary> /// 分析url链接,返回参数集合 /// </summary> /// <param n ...

  2. OpenStreetMap初探(一)——了解OpenStreetMap

    1. 開始关注OpenStreetMap始于此博文:<微软对抗谷歌的秘密武器:开源地图OpenStreetMap>  http://news.csdn.net/a/20120328/313 ...

  3. sap的示例代码

    sap的示例代码查看1.在SE38环境下的程序名输入栏输入'DEMO*'后按F4,你可以查到SAP所有的DEMO示例程序,好好看看,你会学到很多ABAP功能的实现方法.2.运行“ABAPDOCU”T- ...

  4. Lucene.Net 2.3.1开发介绍 —— 简介

    原文:Lucene.Net 2.3.1开发介绍 -- 简介 Lucene.Net是Lucene在dot net平台上的移植版本.它的功能与Lucene一样,都是用来提供一组API,让我们能快速开发自己 ...

  5. 移动App-UI配制篇

    杂志app-UI配制篇 背景 现在公司有需求是关于杂志app,里面每个页面可能有不同的展现方式,不同的内容,不同的操作方式.那么这里就有一个需求就是根据用户定制这些不同的展现方式,不同的内容,不同的操 ...

  6. Hongwei Xi

    Hongwei Xi Hongwei Xi Hongwei Xi's Curriculum Vita Hongwei Xi

  7. 11gR2(11.2) RAC TAF Configuration for Admin and Policy Managed Databases (文档 ID 1312749.1)

    In this Document   Purpose   _afrLoop=1459323732561579&id=1312749.1&displayIndex=10&_afr ...

  8. navicat for mysql 显示中文乱码解决办法

      最近遇到一个问题,用navicat for mysql 打开数据库时全都显示的是乱码(在用程序代码插入数据之前确保字符不是乱码),遇到问题就的寻求解决之道,百度了好长时间也没解决,网上那些解决办法 ...

  9. (四)SAX方式解析XML数据

    SAX方式解析XML数据 ​文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 一.XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程 ...

  10. crm2011js操作IFRAME和选项集