何时使用 std::string vs char*
When to use std::string vs char*?
可能的重复项:
C++字符* 与标准::字符串
我是来自 C# 的C++新手,但我确实更喜欢C++。
我有一个定义两个常量字符串(非静态)的抽象类。我想知道const char*
是否是更好的选择。我仍然掌握C++标准的窍门,但我只是认为在这种特殊情况下我真的没有任何理由需要使用 std::string(无需附加或编辑字符串,只需通过 printf
写入控制台)。
我应该在每种情况下都坚持std::string
吗?
我应该在每种情况下都坚持 std::string 吗?
是的。
除了一些边缘情况,即您编写高性能多线程日志记录库并且您确实需要知道何时进行内存分配,或者可能在某些低级协议/驱动程序中摆弄数据包标头中的单个位。
问题是你从一个简单的字符开始,然后你需要打印它,所以你使用 printf(),然后也许使用 sprintf() 来解析它,因为 std::stream 对于一个 int 来说会很痛苦。你最终会得到一个不安全和不可维护的混合 oc c/c++
我会坚持使用std::string
而不是const char*
,仅仅是因为大多数内置C++库都使用字符串而不是字符数组。 std::string
具有许多内置的方法和工具,在操作字符串时为程序员提供了很大的功能。
我应该在每种情况下都坚持 std::string 吗?
在某些情况下,不需要std::string
,只需一个简单的char const*
就可以了。但是,除了操作之外,您还可以获得其他功能,还可以与其他字符串和char数组进行比较,以及对其进行操作的所有标准算法。
我会说默认情况下使用 std::string
(对于成员和变量),然后只有在您碰巧看到这是性能下降的原因(它不会)时才更改。
当您需要存储值时,请使用std::string
。
当您需要最大的灵活性时,请使用const char *
,因为几乎所有东西都可以轻松转换为一个或从一个转换。
这就像将苹果与橙子进行比较。 std::string
是一个容器类,而 char* 只是一个指向字符序列的指针。
这实际上完全取决于您要对字符串执行的操作。
另一方面,Std::string可以为您提供简单的字符串计算和操作功能的快速访问。其中大多数是简单的字符串操作函数,实际上没有什么花哨的。
因此,这基本上取决于您的需求以及函数的声明方式。std::string 相对于字符指针的唯一优点是它不需要特定的长度延迟。
- char* 缓冲区 = C++ 中的新 vs char 缓冲区 []
- char array[sizeof(Message)]; vs char* array = new char[sizeo
- 'type_alias<char[N]>{}' VS 'char[N]{}' in function's arguments
- C++ SFINAE : is_constructible for const char[] vs std::strin
- 改变vs中持续char*的元素
- CORBA IDL to C++ - char vs. unsigned char?
- const char * ptr vs char ptr []
- Null指针异常(int Vs char)
- C++ map<std::string> vs map<char *> 性能(我知道,"again?" )
- C 字符串的长度:std::strlen() vs. std::<char>char_traits::length()
- C++ map::find char * vs. char []
- std::string vs char[] vs char*
- constexpr const char * vs constexpr const char[]
- 内存的字节读取:"signed char *" vs "unsigned char *"
- reinterpret_cast<int*>(char*) vs. static_cast<int*>(static_cast<void*>(char*)) --
- static_cast void* char* vs static_cast void** char**
- 为什么在这个上下文中打印-1 ?(有符号char vs无符号char)
- Bit shifting `char` vs. `unsigned char`
- OpenCV - char vs. int
- const constexpr char* vs. constexpr char*