缩小从char到uint8_t的转换

mfo*_*ini 2 c++ narrowing c++11

使用C++ 11编译以下代码段(此处演示):

#include <stdint.h>

int main() {
    const uint8_t foo[] = {
        '\xf2'
    };
}
Run Code Online (Sandbox Code Playgroud)

将触发(至少在GCC 4.7)的警告,表明有转换时的收缩转换'\xf2'uint8_t.

为什么是这样?sizeof(char)总是1,应该是相同的sizeof(uint8_t),不应该吗?

请注意,当使用其他字符文字时'\x02',没有警告.

Som*_*ame 5

虽然char不一定必须是8位长,但这不是问题.您正在转换signed char为unsigned(uint8_t),这就是错误的原因.

这个:

const int8_t foo[] = {
    '\xf2'
};
Run Code Online (Sandbox Code Playgroud)

将编译好.