检查是否为输入流设置了skipws / noskipws标志

时间:2019-03-20 14:28:02

标签: c++ iostream iomanip

要设置std::skipws(或std::noskipws)标志,需要编写:

my_input_stream >> std::skipws; //or my_input_stream >> std::noskipws;

但是,如果设置了标志,如何检查?我需要为noskipws启用operator >>,但是之后要恢复先前设置的值。我知道boost的I / O状态保护程序,但是我需要为学生做一个演示,使用boost可能太简单了。

3 个答案:

答案 0 :(得分:4)

您正在寻找std::ios_base::flags():)

答案 1 :(得分:2)

您必须使用流中的标志:

my_input_stream.flags() & std::ios_base::skipws

答案 2 :(得分:2)

您需要使用flags()成员函数。这将返回当前标志,您可以测试是否设置了std::ios_base::skipws标志,如下所示:

int main()
{
    std::cin >> std::noskipws;
    if (!(std::cin.flags() & std::ios_base::skipws))
        std::cout << "no skipws set\n";
    std::cin >> std::skipws;
    if (std::cin.flags() & std::ios_base::skipws)
        std::cout << "skipws set";
}