可能是重复问题:
C++ char* vs std::string
我是从C#转来的新手,但我确实更喜欢C++。
我有一个抽象类,其中定义了两个常量字符串(非静态)。 我想知道 const char*
是否是更好的选择。 我还在逐渐掌握 C++ 标准,但我认为在这种情况下没有任何理由使用 std::string (只是通过 printf
写入控制台,而不是附加或编辑字符串)。
在每种情况下,我应该坚持使用 std::string
吗?
可能是重复问题:
C++ char* vs std::string
我是从C#转来的新手,但我确实更喜欢C++。
我有一个抽象类,其中定义了两个常量字符串(非静态)。 我想知道 const char*
是否是更好的选择。 我还在逐渐掌握 C++ 标准,但我认为在这种情况下没有任何理由使用 std::string (只是通过 printf
写入控制台,而不是附加或编辑字符串)。
在每种情况下,我应该坚持使用 std::string
吗?
在所有情况下,我应该坚持使用std :: string吗?
是的。
除非您编写高性能多线程记录库并且确实需要知道内存分配何时发生,或者在某些低级协议/驱动程序中调整数据包头部的单个位。
问题在于您从一个简单的char开始,然后需要打印它,所以您使用printf(),然后可能使用sprintf()进行解析,因为std :: stream对于仅一个int转换为字符串来说太过麻烦。这样,您最终会得到一个不安全且难以维护的C / C ++混合。
write
而不是<<
等运算符时,char *
更好。如果你正在使用操作系统API,你需要使用char *
。此外,char *
使你更容易控制内存分配。 - Linuxios我建议使用std::string
而不是const char*
,因为大多数内置的C++库都使用字符串而不是字符数组。 std::string
拥有许多内置方法和工具,给程序员在操作字符串时提供了很强的能力。
char const*
上工作,只要你有一个大小。 - R. Martinho Fernandesc_str()
可以做到这一点。 - K-ballovector<char>
或其他东西来解决这个问题(此时我们又回到了性能论点...)。 - Oliver Charlesworth当您需要存储一个值时,请使用std::string
。
当您想要最大的灵活性时,请使用const char *
,因为几乎所有内容都可以轻松地转换为它或从它转换。
printf
和cout
的比较。我认为C++的输入输出有些难看,而且相当笨重,并且由于它的隐藏全局变量而非常脆弱。 - David Hammen