Я только что видел, как чей-то блог написал этот пример кода, иллюстрирующий простое использование initializer_list, появившегося в C ++ 11:
#include <iostream>
//#include <initializer_list>
using namespace std;
void print(initializer_list<int> list) {
for(auto it = list.begin(); it!=list.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
int main() {
print({1,2,3,4,5,6,7});
return 0;
}
Однако я тестировал в Ubuntu16.04 с g ++ - 5.4 и clang ++ - 8, также протестированные с Visual Studio 2017, все они компилируются нормально, без каких-либо ошибок компиляции . Я странствую, почему закомментированный #include <initializer_list>
не требуется.
Моя команда компиляции:
g++ main.cpp -std=c++11 -Wall
Не включая initializer_list
заголовочный файл, как компилятор C ++ нашел свое определение?
И еще сбивает с толку, когда я должен принудительно включать в себя заголовочный файл initializer_list
?
Выяснил по VS2017. Это длинное включение.
iostream <- istream <- ostream <- ios <- xcolumn <- streambuf <- xiosbase <- xlocale <- stdexcept <- xstring <- xmemory0 <- xutility <- utility <- xstddef <- initializer_list </p>