gpt4 book ai didi

c++ - aligned_storage 的基本用途是什么?

转载 作者:可可西里 更新时间:2023-11-01 15:20:49 46 4
gpt4 key购买 nike

std::tr1::aligned_storage 的基本用法是什么?它可以用作像下面这样的数据类型 Foo 的自动存储器吗?

   struct Foo{...};
std::tr1::aligned_storage<sizeof(Foo)
,std::tr1::alignment_of<Foo>::value >::type buf;
Foo* f = new (reinterpret_cast<void*>(&buf)) Foo();
f->~Foo();

如果是这样,在 buf 中存储多个 Foo 怎么样,

    std::tr1::aligned_storage<5*sizeof(Foo)
,std::tr1::alignment_of<Foo>::value >::type buf;
Foo* p = reinterpret_cast<Foo*>(&buf);
for(int i = 0; i!= 5; ++i,++p)
{
Foo* f = new (p) Foo();
}

它们是有效程序吗?还有其他用例吗?Google 搜索仅提供有关 aligned_storage 的文档,但很少提供有关其用法的文档。

最佳答案

嗯,除了你使用 reinterpret_cast ,我觉得还可以。 (我不是 100% 确定第二个)。

reinterpret_cast 的问题是它不保证转换的结果,只是如果将结果转换回原始类型,您将获得原始值。因此无法保证转换的结果将包含相同的位模式,或指向相同的地址。

据我所知,将指针 x 转换为类型 T* 的可移植解决方案是 static_cast<T*>(static_cast<void*>(x)) , 自 static_cast往返void*保证将指针指向同一地址。

但这只是与您的问题无关。 :)

关于c++ - aligned_storage 的基本用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1082378/

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