gpt4 book ai didi

c++ - 为什么有两个 std::allocator::construct 函数?

转载 作者:行者123 更新时间:2023-11-30 05:40:50 25 4
gpt4 key购买 nike

标准在std::allocator<T>中给出了两个构造函数对于下面的放置新语法:

void construct( pointer p, const_reference val );  (1)  (until C++11)

template< class U, class... Args >
void construct( U* p, Args&&... args ); (2) (since C++11)

1) Calls new((void *)p) T(val)
2) Calls ::new((void *)p) U(std::forward<Args>(args)...)

除了我们在 2) 中将所有参数转发给构造函数之外,1) 和 2) 之间有什么区别为什么我们需要 1)?

假设我们只有签名 2) ,然后从(不存在的)第一个参数传递参数将导致调用:

::new((void *)p) T(std::forward<const_reference>val) 

无论如何应该调用复制构造函数 T(val)?在这里,我问我拥有附加签名 1) 有什么意义?有区别的叫new另一个是全局函数 ::new

感谢您对此有所启发 :-)

最佳答案

答案在您发布的摘录中:一个是 C++11 之前的版本,一个是 C++11 之后的版本。 construct 最好通过完美转发参数而不是调用复制构造函数来表达,但是完美转发仅在 C++11 中可用,因此我们必须先使用第一个选项才能实现成为现实。

关于c++ - 为什么有两个 std::allocator::construct 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31400208/

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