Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用字节初始化char*和std::字符串_C++_Arrays_String_C++17 - Fatal编程技术网

C++ 使用字节初始化char*和std::字符串

C++ 使用字节初始化char*和std::字符串,c++,arrays,string,c++17,C++,Arrays,String,C++17,是否定义了以下实现: char *cp = "\x96\xA0\xB4\xBE\xC8"; signed char *cp = "\x96\xA0\xB4\xBE\xC8"; 以及: std::string = "\x96\xA0\xB4\xBE\xC8"; std::string = "\x96\xA0\xB4\xBE\xC8"; char在我的编译器(MSVC 2015)上表示signed char 我想我不能做到以下几点: unsigned

是否定义了以下实现:

char *cp = "\x96\xA0\xB4\xBE\xC8";
signed char *cp = "\x96\xA0\xB4\xBE\xC8";
以及:

std::string = "\x96\xA0\xB4\xBE\xC8";
std::string = "\x96\xA0\xB4\xBE\xC8";
char
在我的编译器(MSVC 2015)上表示
signed char

我想我不能做到以下几点:

unsigned char *cp = "\x96\xA0\xB4\xBE\xC8";
“\x96\xA0\xB4\xBE\xC8”
是0-255范围内的字节,因此我的问题是:

以上内容是否取决于编译器

是否定义了以下实现:

char *cp = "\x96\xA0\xB4\xBE\xC8";
signed char *cp = "\x96\xA0\xB4\xBE\xC8";
以及:

std::string = "\x96\xA0\xB4\xBE\xC8";
std::string = "\x96\xA0\xB4\xBE\xC8";
在具有8位宽有符号字符的系统上,是。如果窄字符串文字中的十六进制转义序列超出为
char
定义的实现定义范围,则该序列具有实现定义的值。假设8位有符号字符,任何大于7F的十六进制值都超出可表示值的范围

在这方面,该文本是否用于初始化
std::string
或字符指针无关紧要


您可以使用
无符号字符数组
代替字符串文字:

static constexpr unsigned char cp[] = {
    0x96,
    0xA0,
    0xB4,
    0xC8,
};
如果需要,可以使用此数组初始化
std::basic_字符串

 std::basic_string<unsigned char> s = {std::begin(cp), std::end(cp)};
std::basic_string s={std::begin(cp),std::end(cp)};

另外,从字符串文字到非常量字符指针的转换格式不正确(因为C++11;之前的转换格式正确,但不推荐使用)


p.p.S
char
unsigned char
signed char
始终是三种不同的类型,无论
char
是否有符号。

char
signed char
永远不是同一类型,即使
char
是有符号类型。字符串文本是
const
。你说“我不能做”是什么意思?问题是什么<代码>标准::字符串=“\x96\xA0\xB4\xBE\xC8”不编译
char
可以是有符号的,也可以是无符号的,在这两种情况下,它与
signed char
unsigned char
的类型不同,这是语言的一个怪癖,不要尝试获取它的逻辑否,
char
是无符号的或有符号的,但是无论是
usigned char
还是
signed char
:有可能使这个定义良好且不依赖于编译器吗?例如,我不能这样做:
unsigned char*cp=“\x96\xA0\xB4\xBE\xC8”
是否有必要?@user963241这无助于使字符串文本的值独立于编译器。您可以改为使用数组,如我的编辑中所示。是的,我的意思是有符号性是实现定义的,并且值例如“\x96”的解释方式也是实现定义的,但是如果我们执行
unsigned char c='\x96'
,则它是定义良好的。@user963241是的,对每个语句。尽管正确的语法是
无符号字符c=0x96
;不存在一个字符小于8位或不是2位补码的计算机系统。看起来C++20最终会成功。