不得不留意的STL string重载函数和隐式类型转换
这篇讲的是STL `std::string` 构造函数的性能差异,作者从360云引擎团队的一篇深入剖析文章出发,通过实测数据揭示了几个容易忽视的关键点。 文章在Linux GCC 4.1.2环境下,对多种`string`构造方式进行了万次循环计时。结果发现,利用拷贝构造函数`string(const string&)`最快,这得益于写时复制(COW)机制。而令人意外的是,最常用的`string(const char*)`构造方式耗时竟然最长,比其他需要分配内存的构造方式慢数倍。原因在于,若不预先提供字符串长度,构造函数内部必须先调用`strlen`遍历一次整个字符串以确定内存大小,而像`string(const char*, size_t)`这样直接给出长度的版本则省去了这步开销。 这提醒开发者,在已知字符串长度的情况下,显式传递`size_t`参数能带来显著的性能提升。同样,需要复制`string`时,直接使用拷贝构造函数也是更高效的选择。