ein*_*ica 0 c++ 64-bit types int64 long-long
如果我跑:
#include <type_traits>
#include <iostream>
int main()
{
std::cout << "sizeof(long) = " << sizeof(long) << "\n";
std::cout << "sizeof(long long) = " << sizeof(long long) << "\n";
std::cout << "std::is_same<long, long long>::value = "
<< std::boolalpha << std::is_same<long, long long>::value
<< "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上(和Coliru),我得到:
sizeof(long) = 8
sizeof(long long) = 8
std::is_same<long, long long>::value = false
Run Code Online (Sandbox Code Playgroud)
它不仅仅是std::is_same<>; 翻译单元期待的一个实例int64_t失败,因为我只编译int并long long int在另一个翻译单元,尽管这一切发生在同一台机器上.
为什么这些类型不一样?我的意思是,表现出你所拥有typedef的相同类型的行为?
这是语言规则,对于可移植性至关重要.
int,long和long long,都被语言视为不同的类型,即使它们具有相同的字节数和补充方案.
这是故意的.这意味着您可以编写可以在类型大小不同的不同平台上编译的代码.
如果说两个超载,那将是非常烦人的
void foo(int f)
Run Code Online (Sandbox Code Playgroud)
和
void foo(long f)
Run Code Online (Sandbox Code Playgroud)
在一个平台上被视为相同的功能,在另一个平台上被视为不同的重载.