这篇文章就简单分析一下,函数参数使用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的优点:
string相比于const char*的两个优点: