我试图使用constexpr和static_assert。我实际上需要检查constexpr字符串的长度,该字符串由专用函数计算。以下是我试图运行的内容:
#include <iostream>
using namespace std;
class Test
{
private :
static constexpr char str[] = "abc";
static int constexpr constStrLength(const char* str)
{
return *str ? 1+constStrLength(str+1) : 0;
}
static constexpr int length = constStrLength(str);
static_assert(length ==3, "error");
public :
static void f()
{
cout << len << endl;
}
};
int main()
{
Test::f();
return 0;
}
这是我得到的错误:
错误:&#39; static constexpr int Test :: constStrLength(const char *)&#39;叫 在常量表达式中,静态constexpr int len = constStrLength(&#34; length&#34;);
实现目标的正确方法是什么?
感谢您的帮助!
答案 0 :(得分:6)
用作constexpr
函数的constexpr
函数需要在使用点定义。但是,当您使用constStrLength()
来定义 length
时,它只是声明:在类定义中定义的成员函数实际上只是声明在类定义中!它们的定义在类定义之后立即可用,即在右括号之后非正式地说。
修复是在使用它之前定义constStrLength()
,例如,作为非成员函数或通过在基类中定义它。