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',没有警告.
虽然char不一定必须是8位长,但这不是问题.您正在转换signed char为unsigned(uint8_t),这就是错误的原因.
这个:
const int8_t foo[] = {
'\xf2'
};
Run Code Online (Sandbox Code Playgroud)
将编译好.
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |