【发布时间】:2013-02-14 02:04:57
【问题描述】:
我想转换这个工作代码:
ofstream outfile("my_file.txt");
copy(v.begin(), v.end(), ostream_iterator<int>(outfile));
进入这个:
copy(v.begin(), v.end(), ostream_iterator<int>(ofstream("my_file.txt")));
换句话说,我使用“匿名”或未命名的 ofstream 对象版本。
两个问题:
(1) 为什么第二次尝试失败?
(2) 第二次尝试在风格上是否更好,或者在 C++ 中明确命名所有内容是否更好?我来自 Python 背景,一直在动态创建对象。
谢谢!!
【问题讨论】:
-
因为迭代器的构造函数需要非 const 引用,并且您正在传递一个临时对象,最多只能将其发送到 const 引用参数。要回答您的第二个问题,无法编译/工作的代码几乎不符合“良好风格”的传说。
-
第二个版本怎么失败了?它编译吗?如果不是,错误是什么?如果是这样,您会收到运行时错误吗?
标签: c++ temporary-objects anonymous-objects