【发布时间】:2018-09-09 19:02:31
【问题描述】:
ifstream 提供operator>> 的重载以从流的下一行提取值。但是,我往往会发现自己经常这样做:
int index;
input >> index;
arr[index] = <something>;
有没有什么方法可以让这些数据进入[index] 而无需创建这个临时变量?
【问题讨论】:
-
深入了解
arr和<something>。但最终,我倾向于没有简单的解决方案。 -
@StoryTeller arr 是一个简单的
vector<T>,与arr和index无关 -
即使您将数据放入
[index]而不创建显式本地(临时)变量,您仍然会获得一个未命名的临时变量。编译器能够很好地优化显式局部变量。我宁愿明确而不是狡猾,但这就是我。 -
由于输入通常会失败,因此有必要验证读取尝试是否成功。该接口是故意使测试惯用的方式:
if (in >> value) { /* use value */ }。此外,评估顺序是未定义的,像array[read<int>(in)] = read<T>(in);这样的东西肯定会做错事(你的<something>最好是读取同一个流)。
标签: c++ stream operator-overloading ifstream syntactic-sugar