gpt4 book ai didi

c++ - 复制原始类型行为的 std::vector

转载 作者:太空狗 更新时间:2023-10-29 20:37:03 24 4
gpt4 key购买 nike

背景:

当使用复制构造函数或复制赋值复制 std::vector 时:

std::vector<T> v1{T(),T(),T()};
std::vector<T> v2 = v1;

发生深拷贝。

T的copy constructor是不是有标准保证,每个元素都会被触发?换句话说,不会调用 memcpy(或类似的东西)。 (如果我错了,请纠正我)。

问题:

另一方面,标准是否保证它会在原始类型上调用 memcpy(或类似的东西)(用于性能问题)?

最佳答案

是的,必须调用T 的复制构造函数。如果复制构造函数是微不足道的,它的效果与 memcpy 完全相同,因此可以使用后者来实现该复制构造函数。从那时起,实现可能会决定使用 memcpy 来实现 vector 的复制构造函数。该决定使用了 as-if rule : 程序的可观察行为保持不变,因此我们不需要实际执行所有复制构造函数调用。

On the other hand, does it guaranteed by the standard that it would call memcpy (or something similar) on primitive types (for performance issues)?

不,因为复制构造函数的实际实现方式是一个实现细节。该标准仅指定程序的(可观察的)行为,并且它使用复制构造函数等概念来实现。优化不是抽象标准文档应该担心的,而是您的供应商。事实上,限制此类函数的定义要么会导致优化方面的巨大缺陷,要么会由于上述假设规则而被完全忽略。

关于c++ - 复制原始类型行为的 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36221247/

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