码:
#include <cstdio>
int main() {
unsigned char a = -300.f;
printf("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)
海湾合作委员会编制:
g++ test.cpp -o test -std=c++11
test.cpp: In function ‘int main()’:
test.cpp:4:21: warning: overflow in implicit constant conversion [-Woverflow]
unsigned char a = -300.f;
^
Run Code Online (Sandbox Code Playgroud)
GCC结果:
0
Run Code Online (Sandbox Code Playgroud)
GCC版本:
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609
Run Code Online (Sandbox Code Playgroud)
Clang编译:
clang++ test.cpp -o test -std=c++11
test.cpp:4:21: warning: implicit conversion from 'float' to 'unsigned char' changes value from 300 to 255
[-Wliteral-conversion]
unsigned char a = -300.f;
~ ^~~~~
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
铿锵的结果:
160
Run Code Online (Sandbox Code Playgroud)
铿锵版:
clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Run Code Online (Sandbox Code Playgroud)
也许标准没有定义这种行为.
添加后-fsanitize=undefined
:
GCC结果(同样):
0
Run Code Online (Sandbox Code Playgroud)
Clang结果(48!?):
test.cpp:4:20: runtime error: value -300 is outside the range of representable values of type 'unsigned char'
48
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
80 次 |
最近记录: |