gpt4 book ai didi

c++ - constexpr 和函数的使用

转载 作者:行者123 更新时间:2023-11-30 00:46:03 24 4
gpt4 key购买 nike

我正在尝试使用 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;
}

这是我得到的错误:

error: 'static constexpr int Test::constStrLength(const char*)' called in a constant expression static constexpr int len = constStrLength("length ");

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

感谢您的帮助!

最佳答案

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

解决方法是在使用之前定义 constStrLength(),例如,作为非成员函数或在基类中定义它。

关于c++ - constexpr 和函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39820144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com