13

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

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

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

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

4

5 回答 5

9

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

是的。

除了一些边缘情况,您编写高性能多线程日志库并且您确实需要知道何时进行内存分配,或者可能在某些低级协议中摆弄数据包标头中的各个位/司机。

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

于 2012-06-07T18:34:37.807 回答
6

我会坚持使用std::string而不是const char*,因为大多数内置 C++ 库都使用字符串而不是字符数组。std::string有很多内置的方法和设施,在操作字符串时给程序员很大的权力。

于 2012-06-07T18:39:24.893 回答
3

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

在某些情况下std::string不需要,只需一个简单的char const*就可以了。但是,除了操作之外,您确实获得了其他功能,您还可以与其他字符串字符数组进行比较,以及对它们进行操作的所有标准算法。

我会说std::string默认情况下使用(对于成员和变量),然后仅在您碰巧看到这是性能下降的原因时才更改(它不会)

于 2012-06-07T18:36:23.893 回答
1

这就像将苹果与橙子进行比较。std::string是一个容器类,而 char* 只是一个指向字符序列的指针。

这真的完全取决于你想对字符串做什么。

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

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

于 2012-06-07T18:48:42.773 回答
1

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

当您想要最大的灵活性时使用const char *,因为几乎所有东西都可以轻松转换为一个或从一个转换。

于 2012-06-07T18:38:51.383 回答