【发布时间】:2023-04-04 17:03:01
【问题描述】:
我试图了解std::launder 的作用,我希望通过查找示例实现可以清楚地了解。
在哪里可以找到std::launder 的示例实现?
当我查看 lbic++ 时,我看到类似
的代码 template<typename _Tp>
[[nodiscard]] constexpr _Tp*
launder(_Tp* __p) noexcept
{ return __builtin_launder(__p); }
这让我觉得这是另一个编译器魔法函数。
这个函数__builtin_launder 可以做什么,它只是添加一个标签来禁止编译器关于别名的警告吗?
是否可以根据__builtin_launder 来理解std::launder,或者它只是更多的编译器魔法(挂钩)?
【问题讨论】:
-
您刚刚提供了一个示例实现 - 我不明白这个问题。你在问what launder is for吗?
-
"我试图了解
std::launder的作用,我希望通过查找示例实现可以清楚地了解。" 是的,这真的不会告诉你很多关于launder的工作原理。根据定义,launder的行为存在于 C++ 正常工作的之外。也就是说,您不能编写launder的实现。这就像要求实现sizeof或offsetof。 -
@alfC:其实你可以自己实现
initializer_list。你不能实现的是initializer_list引用的后备数组,它是通过使用braced-init-list生成的。
标签: c++ c++17 reinterpret-cast aliasing