是“long long”=“long long int”=“long int long”=“int long long”?
我发现long int long
和int long long
都可以编译为一个variablestypes。 long int long
, int long long
, long long
和long 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议,传统的秩序大致沿着
-
static
/extern
(联动) -
const
/volatile
(修改) -
signed
/unsigned
(签名) -
short
/long
(长) - 基本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
是有效的和等同的。