假设我有一个类型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/