异常的变量初始化c ++

时间:2015-03-08 23:30:20

标签: c++ variables initialization

#include <iostream>
using namespace std;
int main(int argc, char** argv) {
    double a;
    double b;
    cin >> a,b;
    cin.ignore();
    cout << "a= "<< a << " b=" << b;    
    return 0;
}

为什么b的值在这种情况下是1.4822e-323?

2 个答案:

答案 0 :(得分:4)

cin >> a,b;

使用臭名昭着的comma operator,它在C ++中具有最低precedence。基本上,上述陈述评估为:

(cin >> a) , b;

因此,正在评估第一个(cin >> a),结果是cin的输入被写入a,并返回istream。然后,在后者istreamb之间调用逗号运算符,这实际上会丢弃第一个操作数,因此语句的最终结果是b,因此保持未初始化。 / p>

如@ IVlad的回答所述,阅读ab的正确方法是

cin >> a >> b;

答案 1 :(得分:3)

这是因为这一行:

cin >> a, b;

不代表read a and read b。它更接近于此:

cin >> a;
b;

要读取这两个值,您需要执行cin >> a >> bb等于您获得的值或多或少是随机的,因为您没有初始化b,也没有真正读过它。