gpt4 book ai didi

c++ - 对于字符串对象连接,stringstream 是否比字符串的运算符 '+' 更好?

转载 作者:可可西里 更新时间:2023-11-01 16:38:08 25 4
gpt4 key购买 nike

比如我有两个字符串对象:string str_1, str_2。我想连接到他们。我可以使用两种方法:方法一:

std::stringstream ss;
//std::string str_1("hello");
//std::string str_2("world");
ss << "hello"<< "world";
const std::string dst_str = std::move(ss.str());

方法二:

std::string str_1("hello");
std::string str_2("world");
const std::string dst_str = str_1 + str_2;

因为字符串的缓冲区是只读的,当你改变字符串对象时,它的缓冲区会被销毁并创建一个新的缓冲区来存储新的内容。那么方法一比方法二好吗?我的理解正确吗?

最佳答案

stringstreams与简单的字符串相比是复杂的对象。每次你使用方法 1 时,一个 stringstream必须 build ,然后销毁。如果你这样做数百万次,开销将是不可忽视的。

看似简单的ss << str_1 << str_2实际上等同于 std::operator<<(sst::operator<<(ss, str_1), str_2);它没有针对内存串联进行优化,但对所有 streams 都是通用的.

我做了一个小的基准测试:

  • 在 Debug模式下,方法 2 的速度几乎是方法 1 的两倍。

  • 在优化构建中(在汇编程序文件中验证没有优化任何内容),它的速度提高了 27 倍以上。

关于c++ - 对于字符串对象连接,stringstream 是否比字符串的运算符 '+' 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30254175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com