C++ “long”与LP64上的“long long”相同吗?

C++ “long”与LP64上的“long long”相同吗?,c++,C++,通过a查看,您可以看到在LP64上,long是64位的,就像同一平台上的long一样。这是否意味着这两种类型在LP64平台上是相同的?不,不是。这只意味着它们的宽度相等。不,不一样。这只意味着它们的宽度相等。不,举个例子: void foo(long); void bar() { foo(5L); } void foo(long long val) { std::cout << val; } void foo(长); 空条() { foo(5L); } v

通过a查看,您可以看到在LP64上,
long
是64位的,就像同一平台上的
long
一样。这是否意味着这两种类型在LP64平台上是相同的?

不,不是。这只意味着它们的宽度相等。

不,不一样。这只意味着它们的宽度相等。

不,举个例子:

 void foo(long);
 void bar()
 {
   foo(5L);
 }
 void foo(long long val)
 {
   std::cout << val;
 }
void foo(长);
空条()
{
foo(5L);
}
void foo(long val)
{
std::coutNo,例如:

 void foo(long);
 void bar()
 {
   foo(5L);
 }
 void foo(long long val)
 {
   std::cout << val;
 }
void foo(长);
空条()
{
foo(5L);
}
void foo(long val)
{

std::cout@RobertHarvey我不认为这有什么用处。
long
long-long
是两种不同的类型,即使它们恰好大小相同。@RobertHarvey:“在所有情况下都可以被替换”@RobertHarvey我看不出这有什么用处。
long
long
是两种不同的类型,即使它们恰好大小相同。@RobertHarvey:“在所有情况下都可以替换”.@DunPeal至少,
long l;long long*p=&l;
应该提供编译时诊断,而不管大小是否匹配。@DunPeal在编译器中出现警告/错误和可能的未定义行为。@DunPeal不,我们不能——正如我提到的,有些情况下(例如,通过不兼容基类型的指针进行别名),这种替换将导致UB。@DunPeal-Like H2CO3暗示了可能的未定义行为。
long l;long-long*p=(long-long*)&l;*p=3;return l;
不保证返回3。@DunPeal@DunPeal至少,
long l;long*p=&l;
应该给出编译时诊断,不管大小是否匹配。@DunPeal在编译器中出现警告/错误以及可能的未定义行为。@DunPeal不,我们不能——正如我所提到的,存在cases(例如,通过不兼容基类型的指针进行别名),这种替换将导致UB。@DunPeal-Like H2CO3暗示了可能的未定义行为。
long l;long-long*p=(long-long*)&l;*p=3;return l;
不保证返回3。@DunPeal。