VC++和GCC中以64位计算机为目标的整数文字的大小

Des*_*ume 2 c++ 64-bit gcc visual-c++

我正在编写面向高性能的跨平台x86/x86-64/Itanium代码,并希望避免任何不必要的操作,包括不需要的类型转换.

我调用的代码是这样的函数:

int theResult = Function(anUInt, 10);
Run Code Online (Sandbox Code Playgroud)

显然,10未指定值的类型.并Function定义如下:

int Function (unsigned int anUInt, int anInt)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我的假设是,使用VC++和GCC定位x86机器时,整数文字的大小为4个字节,因此在输入上述函数时10anInt参数赋值时不需要执行类型转换(int值的大小为4几乎在每个数据模型中).有些人可能不认为它是这种假设的最终证明,但sizeof(1)确实在VC++和为x86架构编译的GCC代码中返回4.我认为,如果64位机器上的整数字面值大小为8字节,则必须将8字节的10值转换为4字节的anInt参数,如果Function频繁调用则会降低性能(是我的计划中的情况).

那么VC++中的整数文字的大小是4,为64位体系结构编译的GCC代码,如x86-64或Itanium,还是8?换句话说,sizeof(1)在针对64位计算机的VC++和GCC代码中会返回什么?安腾(IA-64)架构的任何特殊情况?

编辑:将"无类型整数"更改为"整数文字".

Joh*_*ing 5

在C++中没有"无类型整数"这样的东西.虽然您可能没有指定类型明确,但它确实有一个类型,并且可以计算该类型.标准说明了这一点:

2.13.1整数文字

2整数文字的类型取决于其形式,值和后缀.如果它是十进制且没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,long int; 如果该值不能表示为long int,则行为未定义.如果它是八进制或十六进制且没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,unsigned int,long int,unsigned long int.如果它以u或U为后缀,则其类型是这些类型中的第一个,其值可以表示为:unsigned int,unsigned long int.如果它以l或L为后缀,则其类型是这些类型中的第一个,其值可以表示为:long int,unsigned long int.如果它以ul,lu,uL,Lu,U1,lU,UL或LU为后缀,则其类型为unsigned long int.