在this question中,接受答案的作者不建议使用输入运算符,因为:
operator>>
受iomanip
流操纵者和其他“有趣”的影响, 所以你永远无法确定它是否做了所宣传的内容。
但它是什么意思?当我们用C ++编程时,为什么要避免使用C ++的输入操作符?
我从The Definitive C++ Book Guide and List读过的书没有提到这一点,他们介绍并使用了输入操作符。我也没有在互联网上找到这个主题有用的东西。
谢谢!
p.s:对不起,但我没有足够的声誉在这个话题中提出我的问题。
答案 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)
如果用户输入长度大于分配的缓冲区,则可能导致缓冲区溢出。 黑客可能会使用此方法来覆盖返回地址并运行恶意代码。