使用constexpr和函数

时间:2016-10-02 18:16:43

标签: 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;
}

这是我得到的错误:

  

错误:&#39; static constexpr int Test :: constStrLength(const char *)&#39;叫   在常量表达式中,静态constexpr int len =   constStrLength(&#34; length&#34;);

实现目标的正确方法是什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

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

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