来自Stroustrup的TC++ PL,第3版,第21.3.3节:
如果我们尝试读入变量v并且操作失败,则v的值应该保持不变(如果v是istream或ostream成员函数处理的类型之一,则它不会改变).
以下示例似乎与上述引用相矛盾.基于上面的引用,我期待v的值保持不变 - 但它会变为零.对这种明显的矛盾行为有什么解释?
#include <iostream>
#include <sstream>
int main( )
{
std::stringstream ss;
ss << "The quick brown fox.";
int v = 123;
std::cout << "Before: " << v << "\n";
if( ss >> v )
{
std::cout << "Strange -- was successful at reading a word into an int!\n";
}
std::cout << "After: " << v << "\n";
if( ss.rdstate() & std::stringstream::eofbit ) std::cout << "state: eofbit\n";
if( ss.rdstate() & std::stringstream::failbit ) std::cout << "state: failbit\n"; …Run Code Online (Sandbox Code Playgroud) 我是C++的新手,我正在尝试编写一个非常基本的程序,但我遇到了初始化整数的问题.我把它剥离到一个仍然存在问题的非常小的程序:
#include <iostream>
using namespace std;
int main()
{
cout << "Please enter your age\n";
int age = -1;
cin >> age;
cout <<"\n\n Your age is " << age << "\n\n";
}
Run Code Online (Sandbox Code Playgroud)
我看了,如果我尝试输入一个字符串,例如abc在age变量,然后输入要失败和值应单独留在家中,因此它应该打印Your age is -1.
但是,当我运行此程序并键入时abc,它会打印出来Your age is 0.为什么?
如果在调用像input_stream >> i;这里i是算术型,抛出异常或设置badbit等,是保证i并没有改变?