我想根据模板 bool 参数有条件地在函数中声明局部变量。因此,如果这是真的,它应该在那里,否则不应该在那里,因为我不希望该变量在堆栈上分配内存或调用其构造函数。它也可以是基本类型。
我无法在 constexpr if 块中声明它,因为我需要用法之间的持久性。
我可以声明变量并添加[[maybe_unused]]. 那么,是否有编译器优化保证不为变量分配内存呢?
template <bool T> void foo()
{
[[maybe_unused]] SomeLargeClass x;
if constexpr(T)
{
/* ... do something with x */
}
/* ... do something without x */
if constexpr(T)
{
/* ... do something more with x */
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试将声明替换为
std::enable_if_t<T, SomeLargeClass> x;
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为T==false案例无法提供类型。为什么这不是SFINAE?
我还有其他选择吗?