Действительно ли `sizeof` * * оценивается как` std :: size_t`? Может это?
Возьмите следующий стандартный отрывок:
[C++11: 5.3.3/6]:
Результатsizeof
а такжеsizeof...
константа типаstd::size_t
. [ Запись: std::size_t
определяется в стандартном заголовке<cstddef>
(18.2).—Конечная записка]
В настоящее время:
[C++11: 18.2/6]:
Типsize_t
является целочисленным целочисленным типом, определяемым реализацией, который является достаточно большим, чтобы содержать размер в байтах любого объекта.
Конечно, проход не требует этогоsize_t
это псевдоним типа, определенный сtypedef
, но так как это явно указано, чтобы быть доступным стандартным заголовком<cstddef>
Я думаю, что мы можем принять как читать, что не в состоянии включить<cstddef>
следует удалить любую гарантию того, чтоsize_t
должны быть доступны для программы.
Однако, согласно этой первой цитате, мы можем независимо получить выражение типаstd::size_t
.
Мы можем фактически продемонстрировать оба этих факта:
int main()
{
typedef decltype(sizeof(0)) my_size_t;
my_size_t x = 0; // OK
std::size_t y = 1; // error: 'size_t' is not a member of 'std'
}
std::size_t
не видна программе, ноsizeof(0)
все еще дает нам один? В самом деле?
Поэтому не правильно ли говорить, что5.3.3/6
являетсянедостаткии что он на самом деле имеет "тот же тип, что и любойstd::size_t
решает ", ноне std::size_t
сам?
Конечно, два одинаковы, еслиstd::size_t
это псевдоним типа, но, опять же, это нигде не требуется.