Еще один вопрос, чем Где мне найти определение size_t? ответы.
#include <iostream> //comment this size_t still works, but std::size_t doesn't work
#include <stdlib.h> //comment this size_t still works
int main(int argc, char* argv[])
{
size_t t;
std::size_t t;
return 0;
}
В Visual Studio 2019:
Кажется, что определение size_t находится в vcruntime.h
(1) size_t работает даже без заголовка, почему? Может ли система сборки автоматически включать какой-либо заголовок, например vcruntime.h, или это реализовано каким-либо другим механизмом, например встроенными типами?
(2) std :: size_t можно использовать, только если включен iostream, а F12 также переходит к определению в vcruntime.h. Но поиск всего источника времени выполнения MS VC (например, ... \ VC \ Tools \ MSVC \ 14.23.28105), похоже, не дает такого определения, тогда как это происходит?
Теперь я обнаружил, что то же самое происходит и с Clang 9 в Windows.
<cstddef>
и / или<cstdlib>
. - person Nicol Bolas   schedule 24.02.2020int
компилируется при отсутствии заголовка? Что ж, есть куча загадочных включений по умолчанию, когда вы хотите что-то построить. - person ALX23z   schedule 24.02.2020size_t
является typedef и, следовательно, должен быть определен по типу до его использования. Вы не можете использовать typedef до того, как он действительно получит typedef.int
компилируется, потому что это ключевое слово определяется стандартом и предоставляется непосредственно реализацией. - person Nicol Bolas   schedule 24.02.2020std::size_t
будет вам доступен. Каким образом это происходит в реализации, не имеет значения. - person Nicol Bolas   schedule 24.02.2020size_t
без включения соответствующего заголовка. А если на это не стоит полагаться ... какая разница, как он работает? - person Nicol Bolas   schedule 24.02.2020/permissive-
режиме, вероятно, для большей совместимости, но я не уверен, что они это сделают. - person Predelnik   schedule 02.06.2021