检查是否为输入流设置了 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";
}
为了设置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";
}