我实际上在google上检查了这一点,但我通常发现相反的情况。 C ++中是否存在使用字符串库字符串而不是C字符串或某种字符数组的任何缺点?除了可能有点慢?
随意指出我是一个骗子,但是我已经搜索过,找不到任何东西(我确定有人问过)
答案 0 :(得分:11)
假设std::string
的供应商实施是合格的,那么确实没有明显的劣势。 std::string
类可能比打开编译器优化的普通C字符串慢。
即使您发现自己处于需要 C字符串的情况下(比如说,您需要使用带有const char*
的API),您始终拥有{{ 1}}。
您可能遇到的一个可能的缺点是以非线程安全的方式实现COW语义的供应商实现。 (见std::string in a multi-threaded program)
但是,这在C ++ 0x中是一个非问题,即使在C ++ 03中,它也是一个有问题的供应商实现的例子,而不是std::string::c_str()
的任何内在错误。
另一个可能的缺点是,对于C ++ 03标准中的措辞是否需要std::string
实现来使用连续的内存缓冲区存在争议。这使得您是否可以执行诸如直接从文件读取到std::string
对象之类的操作,这有点令人怀疑。但是,很容易认为C ++ 03标准 实际上隐含地需要一个连续的缓冲区,无论如何它主要是学术问题,因为在实践中1)大多数(或所有)实现std::string
实际上确实提供了一个连续的缓冲区,2)问题对于C ++ 0x来说没有实际意义,这显然需要一个连续的缓冲区。
答案 1 :(得分:3)
我能想到的唯一可能的情况是你需要处理非常大的字符串(例如,一些兆/千兆字节)。在这种情况下,如果选择了STL字符串类,则需要执行一些技巧以避免复制并实现新的放置。对于像这样的操作,char数组将非常简单。
答案 2 :(得分:1)
修改强>
对不起,我完全误解了你的问题。至于缺点,我认为string
类的某些实现使用引用计数,这可能会导致多线程应用程序出现意外的性能特征。
答案 3 :(得分:0)
恕我直言答案取决于你在做什么。如果您依赖使用C字符串的外部库,请务必使用C字符串。
或者......也许你有一个你已经使用多年的完整C字符串库......
否则我会使用stdlib字符串。