sas*_*alm 71 c++ visual-studio-2010
我的一位同事询问是否有未签名的双,我说没有,但我仍然检查它,这在Microsoft Visual C++ 2010中编译:
unsigned double a;
double b;
printf("size_a=%d size_b=%d", (int) sizeof(a), (int) sizeof(b));
Run Code Online (Sandbox Code Playgroud)
它输出size_a=4 size_b=8.也就是说,四个字节unsigned double,和八个字节double.
Cyg*_*sX1 141
unsigned double是无效的.在MSVC中也是如此.在MSCV 2010中编译上述代码并启用警告时,您将获得:
warning C4076: 'unsigned' : can not be used with type 'double'
编译器实际上忽略 double了unsigned,a实际上是一个unsigned int.
如果您尝试以下方法:
unsigned double a = 1.0;
Run Code Online (Sandbox Code Playgroud)
你实际上得到两个警告:
warning C4076: 'unsigned' : can not be used with type 'double'
warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data
Run Code Online (Sandbox Code Playgroud)
有趣的是,MSDN中没有针对VS2010的C4076警告.它仅适用于VS2005和VS2008.
Cli*_*ord 26
如果您将警告级别设置得更高(我的测试中为/ W3),您将收到相应的警告:
警告C4076:'unsigned':不能与'double'类型一起使用
如果您随后使用调试器检查变量,则一切都变得清晰:

你可以看到变量实际上是一个 unsigned int
Jos*_*eld 24
结合unsigned与double在声明说明顺序无效C++.这必须是某种MSVC扩展(或bug).
作为一般规则,最多一个类型说明符被允许在完全DECL说明符-SEQ声明的或在一个类型说明符序列或尾随类型说明符-SEQ.此规则的唯一例外情况如下:
const可以与除自身之外的任何类型说明符组合使用.volatile可以与除自身之外的任何类型说明符组合使用.signed或unsigned可以结合char,long,short,或int.short或者long可以结合使用int.long可以结合使用double.long可以结合使用long.
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |