C++:为什么iostream中包含std::greater()? 我注意到我的C++代码包含了STD::这让我思考。事实证明,这段代码编译: #include <iostream> int main(){ std::greater<T>(); }

C++:为什么iostream中包含std::greater()? 我注意到我的C++代码包含了STD::这让我思考。事实证明,这段代码编译: #include <iostream> int main(){ std::greater<T>(); },c++,C++,但这一条没有: int main(){ //<iostream> doesn´t get included std::greater<T>(); } 通过它我可以推断出包含std::greater,这对我来说有点奇怪。有人能解释一下,为什么std::greater包含在其中 我使用的是g++x86_64-posix-seh-rev0,由MinGW-W64项目8.1.0和C++14构建,如果这很重要的话。ISO标准不保证这一点。该头的实现使用它

但这一条没有:

int main(){           //<iostream> doesn´t get included
    std::greater<T>();
}
通过它我可以推断出包含std::greater,这对我来说有点奇怪。有人能解释一下,为什么std::greater包含在其中


我使用的是g++x86_64-posix-seh-rev0,由MinGW-W64项目8.1.0和C++14构建,如果这很重要的话。

ISO标准不保证这一点。该头的实现使用它。 您还可能会发现,可能作为或的一部分包含,有些可能可以从中获得


这五个保证的头文件是从C++11开始的:ios、iosfwd、istream、ostream、streambuf

这不是ISO标准的保证。该头的实现使用它。 您还可能会发现,可能作为或的一部分包含,有些可能可以从中获得


这五个保证的头文件是从C++11开始的:ios、iosfwd、istream、ostream、streambuf

g++中是否有禁用此功能的标志?我认为依赖的特定实现是一种不好的做法,当库不属于最小值时,我希望编译器通知我。@mondlos不,没有这样的标志。我很抱歉,但这不是编译器的特权,程序员做一些可能的事情。这是开发人员的政策、公司的编码标准等的一部分。如果您不想依赖它,那么就不要依赖它。您可以单独包含标题,它们都有适当的保护。@mondlos您可能需要一个像这样的工具来分析代码,使其尽可能可移植。g++中是否有一个标志来禁用此功能?我认为依赖的特定实现是一种不好的做法,当库不属于最小值时,我希望编译器通知我。@mondlos不,没有这样的标志。我很抱歉,但这不是编译器的特权,程序员做一些可能的事情。这是开发人员的政策、公司的编码标准等的一部分。如果您不想依赖它,那么就不要依赖它。您可以单独包含头文件,它们都有适当的保护。@mondlos您可能需要一个类似于分析代码的工具,以使其尽可能可移植。