我从我的编译器中得到了下面的错误信息,它解释了它。
std::ostream_iterator
的构造函数接受非const引用。没有一个版本的构造函数需要std :: ofstream。
Untitled 33.cpp:21: error: no matching function for call to ‘std::ostream_iterator<int, char, std::char_traits<char> >::ostream_iterator(std::ofstream)’
/usr/include/c++/4.2.1/bits/stream_iterator.h:185: note: candidates are: std::ostream_iterator<_Tp, _CharT, _Traits>::ostream_iterator(const std::ostream_iterator<_Tp, _CharT, _Traits>&) [with _Tp = int, _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.2.1/bits/stream_iterator.h:181: note: std::ostream_iterator<_Tp, _CharT, _Traits>::ostream_iterator(std::basic_ostream<_CharT, _Traits>&, const _CharT*) [with _Tp = int, _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.2.1/bits/stream_iterator.h:169: note: std::ostream_iterator<_Tp, _CharT, _Traits>::ostream_iterator(std::basic_ostream<_CharT, _Traits>&) [with _Tp = int, _CharT = char, _Traits = std::char_traits<char>]
因为迭代器的构造函数需要一个非const引用,并且您正在传递一个临时对象,该对象最好只能发送给一个const引用参数。为了回答你的第二个问题,不编译/工作的代码几乎不符合“好风格”的传说。 – WhozCraig 2013-02-28 01:54:31
第二个版本如何失败?它是否编译?如果不是,那么错误是什么?如果是这样,你是否会遇到运行时错误? – 2013-02-28 01:54:31