为什么要在C ++中避免输入操作符(operator>>)?

时间:2014-01-16 07:08:38

标签: c++ input operators

this question中,接受答案的作者不建议使用输入运算符,因为:

  

operator>>iomanip流操纵者和其他“有趣”的影响,   所以你永远无法确定它是否做了所宣传的内容。

但它是什么意思?当我们用C ++编程时,为什么要避免使用C ++的输入操作符?

我从The Definitive C++ Book Guide and List读过的书没有提到这一点,他们介绍并使用了输入操作符。我也没有在互联网上找到这个主题有用的东西。

谢谢!

p.s:对不起,但我没有足够的声誉在这个话题中提出我的问题。

2 个答案:

答案 0 :(得分:3)

我唯一能想到的是运营商>>在使用之间保留了很多设置。例如:

std::ifstream fin("input.txt");
std::string str;
double num;

someOtherFunction(fin);

while (fin >> str >> num)
{
   //do something
}
除非我们考虑,否则

看起来很无辜:

void someOtherFunction(std::ifstream& fin){
    fin.width(1); 
    fin.setf(/* some flags here */); 
    //...
}

我个人阅读原始文件并使用正则表达式进行解析,但我绝不是该主题的专家,因此建议应该采用大量的方法。

答案 1 :(得分:-4)

如果用户输入长度大于分配的缓冲区,则可能导致缓冲区溢出。 黑客可能会使用此方法来覆盖返回地址并运行恶意代码。