首页 > 编程语言 >C++ string和const char*

C++ string和const char*

时间:2024-03-20 09:59:09浏览次数:24  
标签:std const string void C++ 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作为参数传递过去会被截断的,也就不符合需求;

标签:std,const,string,void,C++,char
From: https://www.cnblogs.com/love-9/p/18084525

相关文章

  • 无穷乘积,Wallis公式以及String公式
    鉴于这学期我从来没听过的高数课没讲无穷乘积,所以我想把这坨给补上(无穷乘积类比于级数的定义,设\(p_1,p_2,\cdots,p_n,\cdots\)是无穷可列个实数,则称它们的“积”为无穷乘积\[p_1\cdotp_2\cdot…\cdotp_n\cdot…\]记为\[\prod_{n=1}^{\infty}p_i\]类似地,定义无穷乘......
  • C++ static和const
    const定义的常量在超出其作用域之后其空间会被释放;static定义的静态常量在函数执行后不会释放其存储空间;1.staticstatic表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员......
  • const,static深度总结——c++穿透式分析
         前言;c++类和对象的知识点中除了几种默认函数,比较重要的还有使用const和static修饰成员相关知识点。const在c++中特性很简单。但是在使用中,比较容易疏忽大意出现问题。static特性也很简单,但是比起const来要直接的多。在使用中只要熟练语法以及底层原理。就......
  • java中的String
    java中String类型1.JVM(内存图)要明白java中的String类型的存储,首先要搞清楚JVM的内部方法区(主要用于存放方法)类常量池静态常量池字符串常量池(避免频繁的创建和销毁字符串,实现了数据的共享,提高了系统的性能)栈区堆区程序计数区本地方法栈2.创建一个字符串publ......
  • PyCharm常用快捷方式
     常用快捷键快捷键功能Ctrl+Q快速查看文档Ctrl+F1显示错误描述或警告信息Ctrl+/行注释(可选中多行)Ctrl+Alt+L代码格式化Ctrl+Alt+O自动导入Ctrl+Alt+I自动缩进Tab/Shift+Tab缩进、不缩......
  • VUE前端打包报错:TypeError: Class extends value undefined is not a constructor or
    在执行npmrunbuild的时候遇到了错误:TypeError:Classextendsvalueundefinedisnotaconstructorornull;而执行npmrunserve是可以正常执行的,报错如下:buildingforproduction...ERRORTypeError:ClassextendsvalueundefinedisnotaconstructorornullTypeErr......
  • echarts,实训1和三,会员基本信息分析
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><!--引入ECharts脚本--><!--<第一步引入脚本>--><scriptsrc="js/echarts.js"></script></head><body>......
  • 【c++】string类---标准库(STL)中的string类
    主页:醋溜马桶圈-CSDN博客专栏:c++_醋溜马桶圈的博客-CSDN博客gitee:mnxcc(mnxcc)-Gitee.com目录1.STL(标准库)1.1什么是STL1.2STL的版本1.3 STL的六大组件1.4 STL的重要性1.5 如何学习STL6.STL的缺陷2.为什么要学习string类2.1C语言中的字符串2.2OJ中......
  • 数据可视化-ECharts Html项目实战(3)
    在之前的文章中,我们学习了如何创建堆积折线图,饼图以及较难的瀑布图并更改图标标题。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。数据可视化-EChartsHtml项目实战(2)-CSDN博客文章浏览阅读1.2k次,点赞33次,收藏16......
  • String字符串的常见方法总结
         String字符串类           在Java中,String 类是表示字符串的不可变对象。这意味着一旦创建了一个 String 对象,就不能修改它的内容。String是一个引用类型,它本身也是一个class类。publicfinalclassStringimplementsjava.io.Serializable,Co......