何时使用std :: string vs char *?

时间:2012-06-07 18:33:43

标签: c++ std

  

可能重复:
  C++ char* vs std::string

我是来自C#的C ++新手,但我确实更喜欢C ++。

我有一个抽象类,它定义了两个常量字符串(不是静态的)。我想知道const char*是否是更好的选择。我仍然掌握着C ++标准,但我只是觉得在这种特殊情况下我没有任何理由需要使用std :: string(没有追加或编辑字符串,只是写入控制台通过printf)。

我是否应该坚持std::string

5 个答案:

答案 0 :(得分:8)

在每种情况下我都应该坚持使用std :: string吗?

除了一些边缘情况,你编写一个高性能的多线程日志文件库,你真的需要知道什么时候会发生内存分配,或者可能是在一些数据包标题中摆弄个别位低级协议/驱动程序。

问题是你从一个简单的char开始,然后你需要打印它,所以你使用printf(),然后可能是一个sprintf()来解析它,因为std :: stream对于一个int来说会很痛苦串起来。而你最终得到一个不安全且不可维护的混合oc c / c ++

答案 1 :(得分:4)

我会坚持使用std::string而不是const char*,因为大多数内置C ++库都使用字符串而不是字符数组。 std::string有许多内置的方法和工具,在操作字符串时为程序员提供了很多功能。

答案 2 :(得分:3)

  

在每种情况下我都应该坚持使用std :: string吗?

有些情况下,std::string不需要char const*,只有普通的std::string会这样做。但是,除了操作之外,您还可以获得其他功能,还可以与其他字符串 char数组进行比较,并对所有标准算法进行操作。

我会说默认情况下使用{{1}} (对于成员和变量),然后只有在您碰巧看到性能下降的原因时才会更改(它不会)

答案 3 :(得分:1)

这就像比较苹果和橘子一样。 std::string是一个容器类,而char *只是一个指向字符序列的指针。

这完全取决于你想用字符串做什么。

另一方面,

Std :: string可以让您快速访问简单的字符串计算和操作功能。其中大部分都是简单的字符串操作功能,真的没什么特别的。

所以它基本上取决于你的需求以及你的函数的声明方式。 std :: string优于char指针的唯一优点是它不需要特定的长度去除。

答案 4 :(得分:0)

需要存储值时使用std::string

当您需要最大的灵活性时,请使用const char *,因为几乎所有内容都可以轻松地转换为一个或来自一个。