我实际上在谷歌检查了这一点,但我通常发现相反.C++中是否存在使用字符串库字符串而不是C字符串或某种字符数组的任何缺点?除了可能有点慢?
随意给我一个傻瓜,但是我已经搜索过并且找不到任何东西(但是我确定有人问过)
Cha*_*via 11
假设供应商的实施std::string能力很强,那么确实没有明显的劣势.在std::string打开编译器优化的情况下,该类不可能比普通的C字符串慢.
即使您发现自己处于需要 C字符串的情况下(比如说,您需要使用带有a的API const char*),您始终拥有std::string::c_str().
您可能遇到的一个可能的缺点是供应商实现以非线程安全的方式实现COW语义.(参见多线程程序中的std :: string)
但是,这在C++ 0x中是一个非问题,即使在C++ 03中,它也是一个有问题的供应商实现的例子,而不是任何本质上错误的std::string.
另一个可能的缺点是,关于C++ 03标准中的措辞是否需要std::string使用连续内存缓冲区的实现存在争议.这使得您是否可以执行诸如直接从文件读取到std::string对象之类的操作,这有点令人怀疑.然而,很容易认为C++ 03标准确实隐含地需要一个连续的缓冲区,无论如何它主要是一个学术问题,因为在实践中1)大多数(或所有)实现std::string实际上确实提供了一个连续的缓冲区,2)问题对于C++ 0x来说没有实际意义,它明确需要一个连续的缓冲区.