C++ 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作为参数传递过去会被截断的,也就不符合需求;
posted @ 2024-03-20 09:46  小熊酱  阅读(124)  评论(0)    收藏  举报