是“long long”=“long long int”=“long int long”=“int long long”?

我发现long int longint long long都可以编译为一个variablestypes。 long int longint long longlong longlong long int之间有什么区别吗?

一般来说,如果长度相同,那么types是否相同?

1长:

 long l; int long il; long int li; 

2长:

 long long ll; int long long ill; long int long lil; long long int lli; 

如果以上是正确的,下面的声明也是一样的吗?

 long long* llp; int long long* illp; long int long* lilp; long long int* llip; 

根据C ++标准(7.1.6.2简单types说明符)

3当允许多个简单types说明符时,可以按任意顺序自由混合其他decl说明符。

所以例如下面的声明是有效的

 long static long const int x = 10; 

你甚至可以使用constexpr说明符和const限定符。 例如

 constexpr long static long const int x = 10; 

那么忘记signed ! 让我们在声明x之前添加它

 constexpr long static long const int signed x = 10; 

在C中,你也可以在同一个声明说明符序列中使用几个types限定符。 根据C标准(6.7.3types限定符)

5如果同一个限定符在相同的限定符列表中直接或通过一个或多个typedef出现多次,则行为与仅出现一次相同。

因此,例如在C中,以下声明也是有效的

 const long const long static const int const signed x = 10; 

因此,如果您根据程序中input的符号数量付款,那么我build议您使用此类声明。 🙂

是相同的types…

是。

C ++ 11§7.1.6.2/ 3

当允许使用多个简单types说明符时 ,可以按任意顺序自由混合其他的decl说明符

是的,但请不要 。 正如英语和德语具有形容词和副词的常规词序(例如时间 – 地点)一样,C和C ++也如此。 从传统的顺序变化不会混淆编译器,但它会混淆你的开发人员。 我会build议,传统的秩序大致沿着

  1. static / extern (联动)
  2. const / volatile (修改)
  3. signed / unsigned (签名)
  4. short / long (长)
  5. 基本types(头名词)

虽然有一定的摆动空间。

是“long long”=“long long int”=“long int long”=“int long long”?

这里的所有其他答案都提到了你的问题的第二部分。 第一部分: “long long”=“long long int”? ,答案是肯定的

C ++ 11 7.1.6.2简单types说明符(表10)

 Specifier(s) Type ... ... long long int “long long int” long long “long long int” long int “long int” long “long int” ... ... 

对于你的问题的第二部分: “long long long”=“int long long”? ,答案是肯定的。

types说明符可以以任何顺序出现,并可以与其他声明说明符混合使用。 因此,以下全部

 long long long long int long int long int long long 

是有效的和等同的。