凡亿专栏 | 参数类型string和const char*哪个更合理?
参数类型string和const char*哪个更合理?

看一些C++项目时,发现有些函数传递的参数类型是const char*,我在想,为什么一个C++项目要用char*指针,用string会不会更好?


6779918f02ac27a5ca522fe76f01a5.jpg


这篇文章就简单分析一下,函数参数使用string还是const char*,哪个更合适?

两种方式的函数声明如下:


void func(const char* s);void func(const std::string& s);


当源是string时:

void funcstr(const std::string& s) { std::cout << s="">void funcchar(const char* s) { std::cout << s="">int main() {    std::string s("fdsfds");    funcstr(s);    funcchar(s.c_str());    return 0;}


两种方式没啥区别,都能满足需求,性能也差不多。


然而,当源是"xxxx"这种普通字符串时:


void funcstr(const std::string& s) { std::cout << s="">void funcchar(const char* s) { std::cout << s="">int main() {    funcstr("dsdd");    funcchar("dddd");    return 0;}


可以分析出来,当传递的是"xxxx"这种串时,string方式会自动创建出个临时对象,临时对象的构造和析构会降低性能。


再一个,string(basic_string)是个封装类,它占用的空间肯定比const char*更大,这块我后续详细介绍一下string的源码分析吧。


然后总结一下:


const char*相比于string的优点:

  • 适配性更好,C语言和C++都适用

  • 效率更高,当传递的是"xxxx"这种串时,string方式会自动创建出个临时对象,临时对象的创建和销毁也是比较耗费性能的

  • 还是效率,string占用的空间比const char*更大


说了一大堆const char*的优点,那使用string究竟有没有优点呢?


我总结了string相比于const char*的两个优点:

  • 方便,不需要关心是否释放相关内存,不需要担心内存泄漏问题

  • 有些string是const char*不能替代的,比如一个string中间有'\0',使用const char*作为参数传递过去会被截断的,也就不符合需求


大家怎么看?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论