通过字节数组用std::memcpy复制同类型平凡可复制对象是否合规?
平凡可复制对象跨实例字节复制的标准合规性疑问
这是《Bitwise swapping the internal representation of two simple objects, even if they are not of a trivially copyable type》的跟进讨论内容。作者简化原代码,将目标类型设定为平凡可复制类型SimpleClass,通过char数组作为临时存储:先用std::memcpy将s1的字节复制到tmp数组,再将tmp的字节复制到s2。
讨论中多数观点认为这段代码符合C++标准的[basic.types#general-2]和[basic.types#general-3]条款,但存在一个关键问题:[basic.types#general-2]仅明确保证,当把字节复制回原对象时,对象会恢复原值,完全未提及将字节复制到同类型其他对象的场景。
作者从标准的设计意图判断,这种跨实例的字节复制应该被允许,且目前主流编译器都认可该写法,但仍有疑问待解:这是标准措辞的疏漏?还是存在其他未被关注到的适用条款?或是当前这种写法本质上属于未定义行为?
内容的提问来源于stack exchange,提问作者Oersted
相关产品推荐
相关产品推荐

