25. string和const char哪个更合理?

string和const char*哪个更合理?

这篇文章就简单分析一下,函数参数使用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*更大。

总结:

const char*相比于string的优点

  • 适配性更好,C语言和C++都适用;
  • 效率更高,当传递的是"xxxx"这种串时,string方式会自动创建出个临时对象,临时对象的创建和销毁也是比较耗费性能的;
  • 还是效率,string占用的空间比const char*更大;

string相比于const char*的两个优点

  • 方便,不需要关心是否释放相关内存,不需要担心内存泄漏问题;
  • 有些string是const char不能替代的,比如一个string中间有’\0’,使用const char作为参数传递过去会被截断的,也就不符合需求;

相关推荐

  1. 25. stringconst char哪个合理

    2024-01-23 19:44:02       57 阅读
  2. 编程天赋努力哪个重要?

    2024-01-23 19:44:02       67 阅读
  3. rebasemerge哪个冲突多?

    2024-01-23 19:44:02       32 阅读
  4. Rust Go 哪个好?

    2024-01-23 19:44:02       79 阅读
  5. ChatGPT文心一言哪个好用?

    2024-01-23 19:44:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-23 19:44:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-23 19:44:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-23 19:44:02       87 阅读
  4. Python语言-面向对象

    2024-01-23 19:44:02       96 阅读

热门阅读

  1. 免费chartGPT网站汇总

    2024-01-23 19:44:02       53 阅读
  2. 如何从软硬件层面优化MySQL?

    2024-01-23 19:44:02       52 阅读
  3. 【Poetry】python包管理工具简介

    2024-01-23 19:44:02       60 阅读
  4. 一键生成-微信问一问解答

    2024-01-23 19:44:02       56 阅读
  5. Midjourney常见命令(极速版)

    2024-01-23 19:44:02       55 阅读
  6. 10个常用python自动化脚本

    2024-01-23 19:44:02       45 阅读
  7. 装进肚子(贪心)

    2024-01-23 19:44:02       51 阅读
  8. linux信号处理机制

    2024-01-23 19:44:02       58 阅读
  9. YOLOv8加入AIFI模块,附带项目源码链接

    2024-01-23 19:44:02       65 阅读
  10. 软件测试零基础快速入门(2024版)

    2024-01-23 19:44:02       60 阅读
  11. QT笔记 - QRegularExpression正则表达式

    2024-01-23 19:44:02       55 阅读
  12. Android 基于Fragment的权限封装

    2024-01-23 19:44:02       51 阅读