c++ - 构造一个没有默认构造函数的空对象

标签 c++ language-lawyer c++17 empty-class

假设我有一个类型F。我知道 F 是空的,但是 F 没有默认构造函数,所以我不能使用 F() 来构造它。无论如何,有没有办法获得 F 类型的有效对象?我似乎记得有人提到过有一种神秘的 union 用法。理想情况下,它将是 constexpr 友好的。


这可能很有用,因为无捕获 lambda 仅在 C++20 中获得默认构造函数。在 C++17 中,如果我想“将 lambda 传递给模板”并在没有它的实例的情况下调用该 lambda,我需要能够从类型中重构它。

auto const f = [](int x) { return x; };
using F = decltype(f);

static_assert(std::is_empty_v<F>);
static_assert(!std::is_default_constructible_v<F>);

<i>magically-construct-an-F</i>(42);

最佳答案

对于您自己的类型,您可以从自身复制或移动构造一个对象:F f = f。这本身不会导致 UB,请参阅 CWG363 .

关于c++ - 构造一个没有默认构造函数的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57007728/

相关文章:

c++ - 为什么非虚拟析构函数没有内存泄漏

c++ - 如何将具有不同参数的 std::function 传递给同一函数

c++ - 范围和分解的原因不允许constexpr

c++ - 为什么const成员函数模板是为非const对象实例化的?

c++ - 如何在通过应用程序进行单步调试时检查堆分配?

c++ - 如何拦截来 self 的 CDialog 的 WM_SIZE 消息

c++ - 默认(用户定义)构造函数和带默认参数的构造函数之间的区别?

c++ - 定义不同于 constexpr 静态成员的声明

c# - 我可以通过在 C# 中连接字符串和 int 常量来创建字符串常量吗?

c++ - 如何为 UWP C++/WinRT 应用程序创建 "suitable await_ready function"?