【发布时间】:2019-06-23 11:08:55
【问题描述】:
给定两个constexpr 函数,是否可以将它们组合成一个函数?
template <char... C>
constexpr int boo()
{
char ch[] = { C... };
int count = 0;
for (char c : ch)
{
if (c != '0') count += 1;
}
return count;
}
template <char... C>
constexpr auto foo()
{
std::array<char, boo<C...>()> x{};
return x;
}
如示例所示,我可以将“count”作为常量返回。
我的问题是我不能在声明的函数中使用 'count' 作为常量。也就是说,如果“boo()”的主体放在“foo()”中,编译器会抛出“count”不是常量。
【问题讨论】:
-
为什么要在函数中为constexpr?它不可能是一成不变的,它会变化。
-
然而 boo 可以将其作为常量返回。我只是认为有一种方法可以在不需要两个 constexpr 函数的情况下做到这一点。
-
这就是语言的工作原理。函数参数和非
constexpr局部变量不能是编译时常量。 -
您的代码在 C++14 模式下运行良好。难道你还在使用 C++11?
-
如果我们能真正看到您省略的代码会很有帮助。
标签: c++ c++17 variadic-templates template-meta-programming constexpr