从我的C ++标准副本[§27.8.2.1p4]:
basic_stringbuf(basic_stringbuf&& rhs);
效果:从rvalue rhs移动构造。 是的 实现 - 定义* this中的序列指针 (eback(),gptr(),egptr(),pbase(),pptr(),epptr())获取值 rhs有哪些。无论他们是否这样做,*这和rhs参考 施工后单独的缓冲区(如果有的话)。开放模式, 语言环境和任何其他状态的rhs也被复制。
类似的句子也用于basic_filebuf(basic_filebuf&& rhs);
。
问题
我想知道为什么这是实施定义的?您是否有理由不想复制指针?
答案 0 :(得分:2)
有两种明显的实现技术可以处理标准流缓冲区中的缓冲区:
根据缓冲区所在位置的实现选择,您需要一组新的指针值,或者您希望按原样继承指针。这两种策略都不是“更好”,我可以想象结合策略的变化。因此,而不是做出选择实现可以选择。如果你的问题是为什么实施应该[忘记]记录它做出的选择:这显然超出了我。我个人的猜测是,假设“实施定义”阶段将提供选择的自由,并且忽略了影响是实施需要陈述其选择(因为有关于引用的辩论:1.3.10) [defns.impl.defined] - 奇怪的是没有段落编号)。