考虑我有足够的存储空间来托管 avoid *
并因此就地构造指针的情况。
是否可以保证相同的存储空间足够大以始终存储一个std::reference_wrapper
?
有点(写在我的脑海里,只是为了理解我的意思):
std::aligned_storage_t<sizeof(void *), alignof(void *)> storage;
// ...
int value = 0;
new (&storage) std::reference_wrapper<int>{value};
从快速而肮脏的测试中,我发现在我的机器上这是有效的,即 a 的大小std::reference_wrapper
与 a 的大小相匹配void *
。但是,在不同的平台上可能会出现这种情况。同时,我在标准中找不到任何关于 and 大小的线索,std::reference_wrapper
我想知道它是否定义了实现或有任何保证。
为了给出上下文,我正在开发一个围绕不同类型(类似于std::any
)的不透明包装器,它执行小对象优化以尽可能避免分配。
当我收到一个std::reference_wrapper
时,我想使用不同的路径来sizeof(T) > sizeof(void *)
区分周围的其他情况。但是,我不知道我是否可以在包装器中复制构造,或者在这种情况下我是否也应该依赖分配。