С++ тип unsigned long int
Является ли unsigned long int
равным unsigned long
?
в С++
По-моему, они такие же. Но я видел, как некоторые люди все еще используют unsigned long int в коде.
Не понимаю, почему? Может ли кто-нибудь объяснить это мне?
#include <stdio.h>
int main() {
unsigned long int num = 282672;
int normalInt = 5;
printf("");
return 0;
}
Ответы
Ответ 1
Да.
long
является просто сокращением для long int
. Это связано с тем, что в принципе long
является просто квалификатором (его также можно использовать для продления типа данных double
, например)
Из стандарта С++ ISO, раздел 7.1.5.2, таблица спецификаторов эквивалентного типа:
![enter image description here]()
Ответ 2
В §6.7.2 стандарта C99 приведен следующий список типов (это только выдержка):
-
short
, signed short
, short int
или signed short int
-
unsigned short
, или unsigned short int
-
int
, signed
или signed int
-
unsigned
, или unsigned int
-
long
, signed long
, long int
или signed long int
-
unsigned long
, или unsigned long int
-
long long
, signed long long
, long long int
или signed long long int
-
unsigned long long
, или unsigned long long int
со следующей дополнительной точкой:
(5) Каждый из разделенных запятыми наборов обозначает один и тот же тип, за исключением того, что для бит-полей он определяется реализацией: спецификатор int
обозначает тот же тип, что и signed int
, или тот же тип, что и unsigned int
.
Ответ 3
Да. unsigned
, signed
, short
, long
, long long
все являются спецификаторами простого типа для XXX int
.
См. 7.1 Спецификаторы [dcl.spec] в стандарте:
3 [Примечание: поскольку подписанный, неподписанный, длинный и короткий по умолчанию подразумевает int, имя типа появляется после одного из эти спецификаторы рассматриваются как объявленное имя (re). [Пример:
void h(unsigned Pc); // void h(unsigned int)
void k(unsigned int Pc); // void k(unsigned int)
-end example] -end note]
и 7.1.6.2 Спецификаторы простого типа [dcl.type.simple]
Table 10 — simple-type-specifiers and the types they specify
Specifier(s) | Type
------------------------+---------------------------------
type-name | the type named
simple-template-id | the type as defined in 14.2
char | "char"
unsigned char | "unsigned char"
signed char | "signed char"
char16_t | "char16_t"
char32_t | "char32_t"
bool | "bool"
unsigned | "unsigned int"
unsigned int | "unsigned int"
signed | "int"
signed int | "int"
int | "int"
unsigned short int | "unsigned short int"
unsigned short | "unsigned short int"
unsigned long int | "unsigned long int"
unsigned long | "unsigned long int"
unsigned long long int | "unsigned long long int"
unsigned long long | "unsigned long long int"
signed long int | "long int"
Ответ 4
unsigned long int
- правильное определение типа, однако int
можно игнорировать.
Ответ 5
Да, они одинаковы. Высказывание unsigned long int
просто явно указывает, что это int.
Вы всегда можете посмотреть размер типа sizeof(unsigned long int)
и sizeof(unsigned long)
Надеюсь, что это поможет.