调用 std::cin.putback(), std::cin.unget() 之前不进行读取操作是否安全?
Is it safe to call std::cin.putback(), std::cin.unget() without preceding them with a read operation?
调用 std::cin.putback
而不用读取操作撤消它是否安全?
std::cin.unget(); // is it safe?
char c{};
std::cin.putback('V');
std::cin.get(c);
std::put(c); // V
我想知道 unget()
在空输入流上做了什么?
因为我可能认为读取指针已经在输入流的开头并且 putback
降低了位置所以在我的情况下这是未定义的行为吗?谢谢!
它不是未定义的。类似于流上的其他异常行为(如到达 EOF 后读取字符),它使流“坏”。
你可以试试:
std::cout << std::cin.fail(); // 0
std::cin.unget();
std::cout << std::cin.fail(); // 1
调用 std::cin.putback
而不用读取操作撤消它是否安全?
std::cin.unget(); // is it safe?
char c{};
std::cin.putback('V');
std::cin.get(c);
std::put(c); // V
我想知道
unget()
在空输入流上做了什么?因为我可能认为读取指针已经在输入流的开头并且
putback
降低了位置所以在我的情况下这是未定义的行为吗?谢谢!
它不是未定义的。类似于流上的其他异常行为(如到达 EOF 后读取字符),它使流“坏”。
你可以试试:
std::cout << std::cin.fail(); // 0
std::cin.unget();
std::cout << std::cin.fail(); // 1