【发布时间】:2011-06-16 10:13:35
【问题描述】:
我做了一个简单的程序,用 GCC 4.4/4.5 编译如下:
int main ()
{
char u = 10;
char x = 'x';
char i = u + x;
return 0;
}
g++ -c -Wconversion a.cpp
我有以下内容:
a.cpp: In function ‘int main()’:
a.cpp:5:16: warning: conversion to ‘char’ from ‘int’ may alter its value
对于以下代码,我收到了同样的警告:
unsigned short u = 10;
unsigned short x = 0;
unsigned short i = u + x;
a.cpp: In function ‘int main()’:
a.cpp:5:16: warning: conversion to ‘short unsigned int’ from ‘int’ may alter its value
谁能解释一下为什么添加两个字符(或两个无符号短裤)会产生 int? 是编译器错误还是符合标准?
谢谢。
【问题讨论】:
-
我想知道这里是否正在进行一些编译器优化,因此您添加的 'u' 只是被文字值 10 替换。但是这似乎相当有问题且不符合标准。
标签: c++ integer integer-overflow integer-promotion