Как я могу улучшить скорость чтения файлов?

В C ++ с начала времен присутствие инициализатора было эксклюзивным атрибутом определения объекта, т. е. объявление с инициализатором всегда является определением (почти всегда).

Как вы должны знать, каждый внешний объект, используемый в программе на C ++, должен быть определен один раз и только один раз только в одной единицы перевода. Разрешение инициализаторов в классе для статических объектов сразу же противоречит этому соглашению: инициализаторы попадают в заголовочные файлы (где обычно находятся определения классов) и, таким образом, генерируют несколько определений одного и того же статического объекта (по одному для каждой единицы перевода, которая включает заголовочный файл ). Это, конечно, неприемлемо. По этой причине подход декларации для статических членов класса остается совершенно «традиционным»: вы только объявляете его в заголовочном файле (т. Е. Ни один инициализатор не разрешен), а затем вы определяете это в единице перевода по вашему выбору (возможно, с инициализатором).

Исключение из этого правила было сделано для константных членов класса static или enum, поскольку такие записи могут использоваться для интегральных константных выражений ( ICES). Основная идея ICE заключается в том, что они оцениваются во время компиляции и, следовательно, не зависят от определений задействованных объектов. Именно поэтому это исключение было возможно для интегральных или перечисляемых типов. Но для других типов это просто противоречит основным принципам декларации / определения C ++.

0
задан RAUL TELO SANCHEZ 18 March 2019 в 17:59
поделиться