gpt4 book ai didi

c++ - std::uninitialized_fill() 和 std::get_temporary_buffer()

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:58 26 4
gpt4 key购买 nike

在 cppreference.com 中 std::uninitialised_fill() 的实现和后续示例中,我在理解一些事情时遇到了一些困难:

template<class ForwardIt, class T>
void uninitialized_fill(ForwardIt first, ForwardIt last, const T& value)
{
typedef typename std::iterator_traits<ForwardIt>::value_type Value;
ForwardIt current = first;
try {
for (; current != last; ++current) {
::new (static_cast<void*>(&*current)) Value(value);
}
....
}

我不明白为什么在 static_cast 中我需要做 (&*)

Stroustrup 在他的书中指出“奇怪的构造 (&*) 负责处理不是指针的迭代器。在那种情况下,我们需要获取通过取消引用获得的元素的地址来获取指针”。

我有三个问题

  1. “不是指针的迭代器”是什么意思?除了指针的泛化之外,它们还能是什么?更令人困惑的是,我们需要将解引用获得的元素的地址获取指针。
  2. 在语法上 ::newnew 是一样的。使用 :: 有特殊原因吗?
  3. get_temporary_buffer() 在概念上是否与 MyClass * p3 = (MyClass*)::operator new (sizeof(MyClass)); 分配存储空间相同?两个不同的东西?

能否为所有问题提供一个小示例?

最佳答案

我不确定这是否是您的意思,但您的观点确实有道理。

可以说,一个容器只包含已初始化的对象,因此如果您正在初始化一个未初始化的缓冲区,该缓冲区几乎肯定是一个您将使用原始指针的数组。

尽管如此,创建指向不是数组的未初始化缓冲区的迭代器是微不足道的,所以我想这是为了处理这种情况。

关于c++ - std::uninitialized_fill() 和 std::get_temporary_buffer(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25184365/

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