2016-11-08 5 views
3

Согласно 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>, но так как это не упоминается в документе, мне было интересно, есть ли способ узнать это раньше?

+6

Нет никакого способа узнать такие детали реализации, потому что это то, что они есть, детали реализации. Если вы хотите быть портативным и соответствовать стандарту C++, вы всегда должны включать файлы заголовков, необходимые для функций и классов, которые вам нужны. –

+0

Я не ожидал, что это зависит от реализации. У меня сложилось впечатление, что определение заголовков будет стандартным, и любая имплицитная иерархия в их импорте. –

+0

iostream является обычным, он разбивается на множество заголовков сам по себе. Вы можете узнать подробности реализации, просто посмотрите в заголовке. Риск заключается в том, что исходный файл не будет компилироваться в другом компиляторе. Никакой большой, легко исправить, конечно. –

ответ

0

Чтобы закрыть тему, сделайте вывод, что это зависит от реализации, и все необходимые заголовки должны быть включены для переносимости.

 Смежные вопросы

  • Нет связанных вопросов^_^