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



为了设置 std::skipws(或 std::noskipws)标志,需要写入:

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

但是,如果设置了标志,则如何检查?我需要为我的operator >>启用noskipws,但是我想在以后还原以前设置的值。我知道I/O州储蓄者的提升,但是我需要为学生进行示范,并且使用Boost可能是为了这个简单的目的而过于谋杀。

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

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

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

您必须使用流的标志:

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

最新更新