是"long long"="long long int"="long int long"="int long long"?

ggr*_*grr 152 c++ syntax long-integer

我找到了两个long int long并且int long long可以编译变量类型.是否有任何区别long int long,int long long,long longlong long int

一般来说,如果它的数量相同,那么它的类型是否相同long

1长:

long l;
int long il;
long int li;
Run Code Online (Sandbox Code Playgroud)

2长:

long long ll;
int long long ill;
long int long lil;
long long int lli;
Run Code Online (Sandbox Code Playgroud)

如果以上是正确的,以下声明是否也相同?

long long* llp;
int long long* illp;
long int long* lilp;
long long int* llip;
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 134

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

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

例如,以下声明有效

long static long const int x = 10;
Run Code Online (Sandbox Code Playgroud)

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

constexpr long static long const int x = 10;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我们忘记了说明者signed!让我们在声明者之前添加它x

constexpr long static long const int signed x = 10;
Run Code Online (Sandbox Code Playgroud)

在C中,您还可以在同一声明说明符序列中使用多个类型限定符.根据C标准(6.7.3类型限定符)

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

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

const long const long static const int const signed x = 10;
Run Code Online (Sandbox Code Playgroud)

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

  • 当你绝对,肯定必须确保价值永远不会改变. (91认同)
  • 你甚至不必混合限定符...`const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const const answer = 42;`编译好C :-) (14认同)
  • 即使写成`#define REM(...)`,然后作为一个大字数的例子,`i ++; REM(这里,我们增加i以确保i的新值比i的旧值多一个.这是安全的,因为我们知道i的值小于i的类型的最大值.)`? (9认同)
  • @hvd你确实是一个专业的程序员!:) (9认同)
  • @Bob听起来像"[DATA语句的主要目的是给常量命名;而不是将pi称为3.141592653589793 ...这也简化了修改程序,如果pi的值改变了."(http:// www.heuse.com/cphumor.htm) (5认同)
  • @hvd不幸的是,通常会从这样的计算中排除评论. (3认同)
  • 如果您根据键入的符号数量获得报酬,那么过长的评论比添加冗余关键字更有效.:) (2认同)
  • @hvd:*错误:未终止的参数列表调用宏"REM"*.在这样的假评论中要小心. (2认同)

Che*_*Alf 111

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

是.

C++11§7.1.6.2/ 3

"当允许多个简单类型说明符时,它们可以按任何顺序与其他decl-specifier自由混合.

  • 直射手。+1。 (3认同)

hob*_*bbs 41

是的,但请不要.就像英语和德语都有形容词和副词的常规词序(例如时间 - 方式 - 地方)一样,C和C++也是如此.改变传统的顺序不会混淆编译器,但它会让你的开发人员感到困惑.我建议传统的顺序基本上是沿着的

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

虽然肯定有一些摆动空间.


hac*_*cks 29

是"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”  
...                     ...  
Run Code Online (Sandbox Code Playgroud)

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

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

long long  
long long int  
long int long  
int long long  
Run Code Online (Sandbox Code Playgroud)

是有效和等效的.

  • @phresnel; 因为所有其他答案只涵盖一半.所有关于格式说明符混插的问题都在标题中缺少问题的前半部分:***是"long long"="long long int"**="long int long"="int long long"?* (8认同)
  • @phresnel有些人回答获得代表的动机.编辑其他人的答案以涵盖另一半答案是为了有效地向其他人提供信贷而做的大量工作. (4认同)
  • 我不明白为什么你不改善@Cheers和hth. - 阿尔法回答. (3认同)