【发布时间】:2012-03-27 09:30:17
【问题描述】:
我尝试过的所有标准实现都允许将值分配给std::ostream_iterator,而无需在分配之前取消引用它们。尽管标准算法在分配之前取消引用迭代器,但我想知道为什么有些实现不只是静态地禁止分配(在代理类的帮助下),这样编译就会失败,所以用户知道如果将此类分配移植到另一个实现由于某些原因不允许分配,则可能会发生错误。
一般来说,在实现标准功能时,将实现限制为仅允许标准明确提及的功能是否是一种好习惯?
#include <iterator>
#include <string>
#include <iostream>
using namespace std;
int main() {
ostream_iterator<string> o(cout);
o = "Hello World\n"; // o is not dereferenced! It compiles with my GCC environment
o++; // to make sure the implementation writes to cout
}
【问题讨论】:
-
In general, when implementing a standard functionality, is it a good practice to limit the implementation to only allow what is explicitly mentioned by the standard?是的,当然。