可能重复:
C++ char* vs std::string
我是来自 C# 的 C++ 新手,但我确实更喜欢 C++。
我有一个抽象类,它定义了两个常量字符串(不是静态的)。我想知道 aconst char*
是否会是更好的选择。我仍然了解 C++ 标准,但我只是认为在这种特殊情况下我确实没有任何理由需要使用 std::string (不附加或编辑字符串,只需写入通过控制台printf
)。
std::string
我应该在每种情况下都坚持吗?
可能重复:
C++ char* vs std::string
我是来自 C# 的 C++ 新手,但我确实更喜欢 C++。
我有一个抽象类,它定义了两个常量字符串(不是静态的)。我想知道 aconst char*
是否会是更好的选择。我仍然了解 C++ 标准,但我只是认为在这种特殊情况下我确实没有任何理由需要使用 std::string (不附加或编辑字符串,只需写入通过控制台printf
)。
std::string
我应该在每种情况下都坚持吗?
在每种情况下我都应该坚持使用 std::string 吗?
是的。
除了一些边缘情况,您编写高性能多线程日志库并且您确实需要知道何时进行内存分配,或者可能在某些低级协议中摆弄数据包标头中的各个位/司机。
问题是你从一个简单的 char 开始,然后你需要打印它,所以你使用 printf(),然后可能是 sprintf() 来解析它,因为 std::stream 对于一个 int 到字符串来说会很痛苦。你最终会得到一个不安全和不可维护的混合 oc c/c++
我会坚持使用std::string
而不是const char*
,因为大多数内置 C++ 库都使用字符串而不是字符数组。std::string
有很多内置的方法和设施,在操作字符串时给程序员很大的权力。
在每种情况下我都应该坚持使用 std::string 吗?
在某些情况下std::string
不需要,只需一个简单的char const*
就可以了。但是,除了操作之外,您确实获得了其他功能,您还可以与其他字符串和字符数组进行比较,以及对它们进行操作的所有标准算法。
我会说std::string
默认情况下使用(对于成员和变量),然后仅在您碰巧看到这是性能下降的原因时才更改(它不会)。
这就像将苹果与橙子进行比较。std::string
是一个容器类,而 char* 只是一个指向字符序列的指针。
这真的完全取决于你想对字符串做什么。
另一方面,Std::string 可以让您快速访问简单的字符串计算和操作功能。其中大部分都是简单的字符串操作函数,没什么特别的。
所以它基本上取决于你的需求以及你的函数是如何声明的。std::string 优于 char 指针的唯一优点是它不需要特定的长度减值。
std::string
在需要存储值时使用。
当您想要最大的灵活性时使用const char *
,因为几乎所有东西都可以轻松转换为一个或从一个转换。