【发布时间】:2021-09-17 18:16:12
【问题描述】:
即使我没有包含<iomanip>,这段代码怎么可能编译?
#include <iostream>
#include <fstream>
int main()
{
std::cout << std::setw(5) << "test" << std::endl;
return 0;
}
编译:
clang++ test.cpp
但如果没有<fstream>,它会抛出错误:
test.cpp:5:20: error: no member named 'setw' in namespace 'std'
std::cout << std::setw(5) << "test" << std::endl;
~~~~~^
1 error generated.
在我朋友的 Mac 上,这两种情况都会引发错误。
【问题讨论】:
-
在您的系统上,iomanip 包含在 fstream 标头中,因此它可以工作,但这是实现定义的,因此另一个系统上的另一个编译器(-version)可以在没有 iomanip 的情况下定义 fstream。
-
iostream和/或fstream中的一个或两个本身可以递归地包含多个头文件等。您可以使用-H选项到clang++(或g++)来找出包含iomanip的确切位置。