可能重复:
C++ char* vs std::string
我是来自C#的C ++新手,但我确实更喜欢C ++。
我有一个抽象类,它定义了两个常量字符串(不是静态的)。我想知道const char*
是否是更好的选择。我仍然掌握着C ++标准,但我只是觉得在这种特殊情况下我没有任何理由需要使用std :: string(没有追加或编辑字符串,只是写入控制台通过printf
)。
我是否应该坚持std::string
?
答案 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 *
,因为几乎所有内容都可以轻松地转换为一个或来自一个。