Действительно ли `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 это псевдоним типа, но, опять же, это нигде не требуется.

Ответы на вопрос(5)

Ваш ответ на вопрос