我今天正在玩一些计时代码,发现当将字符串文字分配给 std::string 时,它的速度大约快了 10%(使用较短的 12 字符字符串,因此对于大字符串可能会有更大的差异)这样做使用已知长度的文字(使用 sizeof 运算符)而不是。(仅用 VC9 编译器测试过,所以我猜其他编译器可能会做得更好)。
std::string a("Hello World!");
std::string b("Hello World!", sizeof("Hello World!");//10% faster in my tests
现在我怀疑的原因是它必须调用 strlen (VC9 进入汇编程序,这不是我的强项,所以我不能 100% 确定)来获取字符串长度,然后像第二种情况一样做同样的事情。
考虑到 std::string 已经存在了多长时间,以及第一种情况在现实世界的程序中有多常见(特别是如果你包含 +、=、+= 等运算符和等效方法),它为什么不优化第一种情况进入第二个?如果它是一个 std::basic_string 对象和一个文字,似乎也很简单,就好像它像 b 一样编写它?