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

Check if skipws/noskipws flag is set for an input stream

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

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

但是我如何检查是否设置了标志?我需要为我的 operator >> 启用 noskipws ,但我想在之后恢复之前设置的值。我知道 boost I/O state savers,但我需要为学生做一个演示,使用 boost 可能对这个简单的目的来说有点矫枉过正。

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

您必须使用流的标志:

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

您需要使用flags()成员函数。这将 return 当前标志,您可以测试是否设置了 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";
}