考虑以下代码:
#include <iostream>
#include <string>
union U
{
std::string s;
U()
{
new(&s) std::string;
}
void Set(std::string new_s)
{
s.~basic_string();
new(&s) std::string(std::move(new_s));
}
~U()
{
s.~basic_string();
}
};
int main()
{
U u;
u.Set("foo");
std::cout << u.s << '\n'; // Do I need `std::launder` here?
}
我知道如果我使用字节数组而不是联合,我必须std::launder(&s)
访问字符串。但我在这里需要它吗?
常识性的答案似乎是“不”,但是标准在哪里可以保证union
不需要呢std::launder
?