gpt4 book ai didi

c++ - 为什么许多标准实现允许将值直接分配给 ostream_iterator?

转载 作者:行者123 更新时间:2023-11-30 04:29:07 26 4
gpt4 key购买 nike

我尝试过的所有标准实现都允许将值分配给 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
}

最佳答案

允许此赋值的运算符重载由 C++ 语言标准指定。因此,C++ 标准库实现必须提供它。

重载指定如下(来自 C++11 §24.6.2.2/1):

ostream_iterator& operator=(const T& value);

Effects:

*out_stream << value;
if(delim != 0)
*out_stream << delim;

return (*this);

(T 是实例化 ostream_iteratorT。在您的示例中,它是 string .)

关于c++ - 为什么许多标准实现允许将值直接分配给 ostream_iterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9642394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com