使用constexpr和函数

Ant*_*rel 1 c++ constexpr

我正在尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

错误:'static constexpr int Test :: constStrLength(const char*)'在常量表达式中调用static constexpr int len = constStrLength("length");

什么是实现它的正确方法?

感谢帮助 !

Die*_*ühl 6

constexpr用作函数constexpr需要将函数定义在使用点.但是,当您使用它constStrLength()定义时, length它只是声明:在类定义中定义的成员函数实际上只在类定义中声明!他们的定义在类定义之后立即可用,即在右括号之后非正式地说.

修复是constStrLength()在其使用之前定义,例如,作为非成员函数或通过在基类中定义它.