2012年(158)
分类: C/C++
2012-11-26 16:03:39
原代码来源于csdn
istream_iterator
istream_iterator
ostream_iterator
while( in_iter!=eof )
{
*out_iter++ = *in_iter++;
}
输入 1 2 3
4,这段代码输出 1 2 3,再输入 5 6 7 8,输出 4 5 6 7,即最后一个总是迟迟不肯输出
不喜欢变态代码,因此改为
for( ; in_iter!=eof; ++in_iter, ++out_iter )
{
*out_iter = *in_iter;
}
看不出任何问题,运行测试一下,也没有任何问题。
看来问题出在 *in_iter++ 处,后++的伪代码大体如下:
type operator++(int) //
postincrement
{
type _tmp = *this; // 备份
++*this; // 自增
return _tmp; // 返回原先值
}
因此 in_iter++
的本质其实是:in_iter自增,而后返回自增前的值
而非想当然的:返回in_iter的值,而后in_iter自增
对于本段代码而言,假如没有下一个输入的int值,则运行时将一直停留在in_iter自增处,没法执行 *out_iter++ = *in_iter++ 中的 = 操作。
因为制定语法的人,编写编译器的人,测试的人一般而言是正常的,所以写正常的代码将少出错误。