fon*_*ini 5 c++ standards c++-standard-library c++11
以下程序正确编译:
#include <algorithm>
int main(int argc, char *argv[]) {
return int(log(23.f));
}
Run Code Online (Sandbox Code Playgroud)
(根据g ++ 4.9.2与旗帜-std=c++11)
代码使用log定义的函数<cmath>.但是,它不包括标题<cmath>,只包括标题<algorithm>.为什么g++不提供任何警告,并正确编译代码?
在C++ 11标准中,[res.on.headers]/1表示
C++标头可能包含其他C++标头.C++标头应提供其概要中出现的声明和定义.在其概要中显示的包含其他C++头的C++头应提供出现在那些其他头的概要中的声明和定义.
现在考虑[algorithms.general]/2:
标题
<algorithm>简介Run Code Online (Sandbox Code Playgroud)#include <initializer_list> namespace std { // ......
<cmath>没有列出,也没有列入<initializer_list>.因此,您的程序无法保证在符合标准的实现上进行编译.人们不应该依赖"隐含包含" - 一般准则是包括使用实体的每个标题.
例外<iostream>包括<ostream>,这是自C++ 11以来的保证.
| 归档时间: |
|
| 查看次数: |
1125 次 |
| 最近记录: |