#c #integer #unsigned #size-t
#c #целое число #без знака #размер-t
Вопрос:
Я пишу программу на C, в которой я использую size_t
для хранения числовых значений, так как в Интернете написано, что size_t
может хранить только unsigned
значения.
Так можно ли хранить 0
в нем??
size_t num = 0;
Комментарии:
1. Да, вы даже можете хранить
-0
2. В каком смысле вы обеспокоены тем, что 0 не является значением без знака? Что тип неприкрашенного целочисленного литерала 0 равен (signed)
int
? Или что-то еще?
Ответ №1:
Да, это нормально.
C17 6.7.9 (11):
Инициализатором для скаляра должно быть одно выражение, необязательно заключенное в фигурные скобки. Начальным значением объекта является значение выражения (после преобразования); применяются те же ограничения и преобразования типов, что и для простого присваивания, принимая тип скаляра за неквалифицированную версию его объявленного типа.
6.3.1.3 (1) говорит:
Когда значение с целочисленным типом преобразуется в другой целочисленный тип, отличный от _Bool , если значение может быть представлено новым типом, оно остается неизменным.
0
это выражение типа int
, значением которого является число ноль. Нулевое значение, безусловно, может быть представлено size_t
, так что это то, на что оно инициализируется.
Вы можете написать size_t num = 0U;
, если вы предпочитаете, чтобы с эстетической точки зрения совпадали подписи, но эффект от этого тот же.