Согласно CPP Doc, std::greater
определяется в <functional>
заголовке, но моя программа C++ с использованием std::greater
компилирует с TDM-GCC-64 5.1.0 и работает только в следующих включает в себя:C++ программа компилирование без функционального заголовка
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <unordered_map>
Это может быть потому, что <algorithm>
автоматически включает в себя <functional>
, но так как это не упоминается в документе, мне было интересно, есть ли способ узнать это раньше?
Нет никакого способа узнать такие детали реализации, потому что это то, что они есть, детали реализации. Если вы хотите быть портативным и соответствовать стандарту C++, вы всегда должны включать файлы заголовков, необходимые для функций и классов, которые вам нужны. –
Я не ожидал, что это зависит от реализации. У меня сложилось впечатление, что определение заголовков будет стандартным, и любая имплицитная иерархия в их импорте. –
iostream является обычным, он разбивается на множество заголовков сам по себе. Вы можете узнать подробности реализации, просто посмотрите в заголовке. Риск заключается в том, что исходный файл не будет компилироваться в другом компиляторе. Никакой большой, легко исправить, конечно. –