相关疑难解决方法(0)

为什么 std::aligned_storage 在 C++23 中被弃用以及使用什么替代?

我刚刚看到 C++ 23计划弃用std::aligned_storageandstd::aligned_storage_t以及std::aligned_unionstd::aligned_union_t

据我所知,在对齐存储中放置新对象并不是特别constexpr友好,但这似乎不是完全丢弃该类型的好理由。这让我假设使用std::aligned_storage和朋友还存在一些我不知道的其他基本问题。那会是什么?

是否有建议替代这些类型?

c++ memory-alignment deprecated c++23

62
推荐指数
1
解决办法
8658
查看次数

指针可互换性与具有相同的地址

标准N4659工作草案说:

[basic.compound]
如果两个对象是指针可互换的,那么它们具有相同的地址

然后注意到

数组对象及其第一个元素不是指针可互换的,即使它们具有相同的地址

使数组对象及其第一个元素非指针可互换的基本原理是什么?更一般地说,区分指针 - 可互换性概念与具有相同地址的概念的理由是什么?在那里某处不存在矛盾吗?

看来,给定这一系列陈述

int a[10];

void* p1 = static_cast<void*>(&a[0]);
void* p2 = static_cast<void*>(&a);

int* i1 = static_cast<int*>(p1);
int* i2 = static_cast<int*>(p2);
Run Code Online (Sandbox Code Playgroud)

p1 == p2但是,我们已经i1明确定义并且使用i2会导致UB.

c++ arrays pointers language-lawyer c++17

24
推荐指数
1
解决办法
1080
查看次数