首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么用char而不要string类型

2013-12-10 
为什么用char而不用string类型正在学习C++,发现各种教材中,表示名字的变量为什么都在用char数组,而不用str

为什么用char而不用string类型
正在学习C++,发现各种教材中,表示名字的变量为什么都在用char数组,而不用string类型啊?

char name[20]; //都用这个
string name;   //不用这个
[解决办法]

引用:
正在学习C++,发现各种教材中,表示名字的变量为什么都在用char数组,而不用string类型啊?

char name[20]; //都用这个
string name;   //不用这个

第一行是c版本的字符数组,在c里面是没有string的,都是用字符数组代替string
而现在的c++有了string类后基本很少用char[]了。字符串基本可以代替字符数组了。
一般c++教材前一部分和c一模一样,面向过程之类的。而后面才是c++的类及一些扩充。而string这个东西本质上和char[]是一样的,或者说思想上的。除了算法书外很少有涉及到string的吧。而算法书大多是伪代码。像string这种东西似乎要到reference里面看比较好
[解决办法]
主要原因如1L。如果一开始就使用string,教材很难解释清楚这里到底是什么东西。
另外,虽然和LZ的问题关系不大,string是有缺点(这点还真被那时候乱喷C++的Linus说对了):对存储的操作不够直接。string作为标准库的一部分,它的实现有很大余地,但上层的接口又是被限制得相当明确的。无论是COW还是引用计数还是小字符串优化,这些详细手段你需要结合源码才能弄明白。而现行标准库中string的相关算法严重不足(所以TR2计划把boost的字符串算法加进去),直接使用起来也不见得很方便。

[解决办法]

char 是内置类型
string 是库类型
但凡库类型,都会建立一套自我的规则和定义,也即是封装. 所以,要理解和运用string,问题一下子变得复杂起来.
但内置类型就没这种烦恼, 因为从一开始,我们就默默地感受它的规则和定义.
从本质上, 内置类型与库类型,没任何的区别.
这是我的理解.
[解决办法]
typedef basic_string<char> string;
string 就是 把 char 的包装.
string 和 vector 很象。
vector<char> str;
basic_string<char> str;

第二次 看 C++ Primer 4 的string章节 对string 有了新的认识

热点排行