编程示例中的混淆
Confusion in a programming example
本文关键字:编程 更新时间:2023-10-16
当前我正在阅读"加速C++";在第4章的一个例子中,编写了一个从输入流中读取的函数,如下所示:
istream &read ( istream & in , vector < double >& work )
{
if ( in ) { // why it is needed ?
double x ; // x denotes the grade
work.clear ( ); // why we need it ?
while ( in >> x )
work.push_back ( x );
in.clear ( ); // understandable.
}
return in;
}
int main ( )
{
vector < double > homework;
vector <double> schoolwork;
read ( cin , homework );
read ( cin , schoolwork );
// code for output
}
为什么需要这样做:
if ( in ){.....}
因为while ( in >> x )
也扮演着同样的角色,因为当输入流中出现错误(例如类型不匹配)时,它将停止接受输入,并且流保持在错误状态,这将使用in.clear()
进一步清除。使得它可以在homework
之后对向量schoolwork
起作用。
那么,尽管我们有
while ( in >> x )
,但为什么需要if ( in )
呢?其次,我对
work.clear( )
非常困惑。为什么我们需要清除向量本身,尽管我们传递的是参考?
-
如果流不好,保持向量不变,而不是清除它。
-
函数的行为是用输入替换
work
的内容。如果没有clear
,它将附加输入。模糊的函数名称和缺乏文档使其不清楚哪一个是意图,除非您阅读代码-重命名函数(例如replace
),或按值返回向量而不是让调用方创建向量,将有助于解决这种模糊性。
相关文章:
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 模板元编程:如何将参数包组合成新的参数包
- Qt Q串行端口未编程设备未关闭
- 模板元编程 - 尝试实现维度分析
- 我是编程新手
- C++编程从外部文本文件定义数组大小
- 了解算法的性能差异(如果以不同的编程语言实现)
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)
- 使用命名空间正确编程
- C++编程:运算符重载中的引用如何工作?
- Arduino 模块化编程与全局和设置
- C++ 运算符修改/元编程策略,用于不那么冗长的语法
- 在没有管理员权限的情况下,在 c++ 中以编程方式将程序添加到启动
- 如何以编程方式将音频从任何录制设备路由到任何播放设备
- 试图修复一个错误,该错误不会让我开始编程其余部分
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- Frank Luna 在他的书"使用 DirectX12 进行 3D 游戏编程"的介绍中盒子示例的问题
- 如何使用可变参数模板类使用模板元编程获得最大值