C++ 何时使用std::vector<;无符号字符>;vs.标准::向量<;char>;

C++ 何时使用std::vector<;无符号字符>;vs.标准::向量<;char>;,c++,stdvector,C++,Stdvector,以下哪一项最适合管理字符缓冲区,该缓冲区可以轻松转换为std::string并在C函数中传递和使用(即读/写) std::vector<unsigned char> std::vector<char> std::vector 向量 两者同样适合。如果这些是字符缓冲区,而不是字节,我将使用std::vector 您可以使用std::string(v.begin(),b.end())从这些类型的向量中创建一个字符串 char比无符号char更兼容字符串。字符串文字是cha

以下哪一项最适合管理字符缓冲区,该缓冲区可以轻松转换为std::string并在C函数中传递和使用(即读/写)

std::vector<unsigned char> 
std::vector<char>
std::vector 向量
两者同样适合。如果这些是字符缓冲区,而不是字节,我将使用std::vector


您可以使用std::string(v.begin(),b.end())从这些类型的向量中创建一个字符串

char
无符号char
更兼容字符串。字符串文字是
char[]
std::String
实际上是
std::basic_String
char
unsigned char
signed char
是三种不同的类型

  • 处理数字时使用
    无符号字符
    有符号字符
  • 处理字符串时使用常规的
    char

因此,您应该使用
char
char
的签名取决于编译器。1

它可以表示
无符号字符
有符号字符
。表示
字符串时使用哪种类型取决于编译器-因此,为了便于移植和清晰起见,应该使用
char
。如果这还不够的话,那么在编写
char
时所需的较少键入是否能说服您呢?:)

同样,编译器认为
string
s属于
char*
类型,它可以等效于
无符号char*
有符号char*
。如果要使用
string
s,请使用
std::vector

1
char
是唯一具有此行为的类型


工具书类 一,


无符号字符以何种方式与字符串不兼容?换句话说,如果我使用无符号字符来表示字符串,你能给我举例说明会出什么问题吗?我不是在质疑你的答案,我只是想得到一个更好的答案understanding@karimjee:
std::string
std::basic_string
的类型定义
std::basic_string
依赖于
std::char_traits
,但
std::char_traits
仅专用于
char
wchar\u t
。因此,
std::basic_string
将不能很好地使用现成的
无符号字符
(尽管在实践中,它可以很好地用于大多数现代编译器)。@ildjarn:你给出了OP最初问题的最佳答案