- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C字符串深入
C++字符串深入 陈皓2010年03月 C 字符串 char str[]=“hello” 和char *p=“hello”的差别 char* p = “test” 的危险性 try { thow “exception”; } catch (char* p) { } GCC不能捕获 VC++可以捕获 字符串操作 strlen strcmp strcpy 标准库中的string类 内存管理 动态分配与释放 动态扩展 字符串的操作符 修改:=, [], +, +=, 比较:!=, ==, , =, , =, I/O:, 字符串算法 append, assign, at, begin, end, compare, copy,data, empty, erase, find, get_allocator, insert, length, max_size, push_back, rbegin, rend, replace, reserve, resize, rfind, size, substr, swap … string类的Copy-on-Write - 例程 string str1 = hello world; string str2 = str1; printf (Sharing the memory:\n); printf (\tstr1s address: %x\n, str1.c_str() ); printf (\tstr2s address: %x\n, str2.c_str() ); str1[1]=q; printf (After Copy-On-Write:\n); printf (\tstr1s address: %x\n, str1.c_str() ); printf (\tstr2s address: %x\n, str2.c_str() ); string类的Copy-on-Write - 运行结果 g++ -o stringTest stringTest.cpp ./stringTest Sharing the memory: str1s address: 343be9 str2s address: 343be9 After Copy-On-Write: str1s address: 3407a9 str2s address: 343be9 string类的Copy-on-Write - 技术细节 string类的意图 意图(Intention) 处理char类型的数组,并封装了字符串处理的函数。 是一个容器。 规格(Specification) 太多的接口函数 - 106个成员接口函数 提高效率 bool operator==(const string lhs, const string rhs); bool operator==(const string lhs, const char* rhs); bool operator==(const char* lhs, const string rhs); 常用的操作。 实现(Implementation) C++标准并没有过多的干预实现。 不同的产商会有不同的实现。 string类的问题 冗余的接口 目前的标string类有106个接口函数(包括构造和析构函数) 如果考虑上默认参数,那么就一共有134不同的接口。 其中有5个函数模板还会产生无穷多个各种各样的函数。 该有的功能没有,已有的又很冗余 string类在同一个功能上实现了多次 而有一些功能却没有实现。如:大小写不区分的比较 String类的继承 string类和的设计和其它容器基本一样。这些STL容器都不鼓励被继承。这样阻止了多态性。 内存碎片的问题 强行动态内存分配(malloc),那怕是一个很短的字符串。 并非线程安全 Copy-On-Write(COW)技术共享内存,可能发生潜在的内存问题 。 String的异常机制 不可能捕捉所有的异常,不然系统性能极低。 QA
文档评论(0)