是长期" =" long long int" =" long int long" =" int long long"?

时间:2015-06-09 08:11:11

标签: c++ syntax long-integer

我发现long int longint long long都可以为变量类型编译。 long int longint long longlong longlong long int之间是否存在差异?

通常,如果long的数量相同,则类型是否相同?

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;

4 个答案:

答案 0 :(得分:131)

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

  

3当允许多个简单类型说明符时,它们可以自由使用   以任何顺序与其他decl-specifiers混合。

例如,以下声明有效

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中,您也可以在同一声明说明符序列中使用多个类型限定符。根据C标准(6.7.3类型限定词)

  

5如果相同的限定符同时出现多次   specifier-qualifier-list,直接或通过一个或多个typedef,   行为就像它只出现一次一样......

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

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

因此,如果您根据程序中输入的符号数量获得报酬,那么我建议您使用此类声明。 :)

答案 1 :(得分:109)

  

类型是否相同......

C ++11§7.1.6.2/ 3

  

当允许多个简单类型说明符时,它们可以与其他 decl-specifiers 自由混合   任何订单。

答案 2 :(得分:40)

是的,但请不要。正如英语和德语对形容词和副词(例如时间 - 地点)的常规单词顺序一样,C和C ++也是如此。改变传统的顺序不会让编译器感到困惑,但会让你的开发人员感到困惑。我建议传统的顺序大致与

一致
  1. static / extern(链接)
  2. const / volatile(修改)
  3. signed / unsigned(签名)
  4. short / long(长度)
  5. 基本类型(头部名词)
  6. 虽然肯定会有一些摆动的空间。

答案 3 :(得分:28)

  

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

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

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

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

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

类型说明符可以按任何顺序出现,并且可以与其他声明说明符混合。因此,以下所有

long long  
long long int  
long int long  
int long long  

有效且等效。