【发布时间】:2020-08-22 14:30:02
【问题描述】:
我想问一个关于 C++ 中 ios 库的问题。
我是 C++ 初学者,正在学习输入/输出流 - iostream
考虑下面的代码:
#include <iostream>
#include <iomanip> // required for manipulators
int main () {
std::cout << "no boolalpha - default (10 == 10): " << (10 == 10) << std::endl;
std::cout << "no boolalpha - default (10 == 20): " << (10 == 20) << std::endl;
// set to true/false formatting
std::cout << std::boolalpha;
std::cout << "boolalpha (10 == 10): " << (10 == 10) << std::endl;
std::cout << "boolalpha (10 == 20): " << (10 == 20) << std::endl;
// setf method
std::cout.setf(std::ios::boolalpha);
std::cout << "boolalpha (10 == 10): " << (10 == 10) << std::endl;
std::cout << "boolalpha (10 == 20): " << (10 == 20) << std::endl;
// reset to default 0/1
std::cout << std::resetiosflags(std::ios::boolalpha);
std::cout << "Default (10 == 10): " << (10 == 10) << std::endl;
std::cout << "Default (10 == 20): " << (10 == 20) << std::endl;
return 0;
我知道我可以通过将std::boolalpha 插入std::out 来切换输出流以显示布尔输出。
不过,我也可以使用setf 方法来切换标志:
std::cout.setf(std::ios::boolalpha);
但是,提供给setf 方法的参数引用了ios 库类,尽管我没有在头文件中导入ios 库。
此代码仍然有效。
为什么会这样?我想我需要声明 <ios> 头文件才能完成这项工作,尽管代码编译得很好。
【问题讨论】: