有关调用constexpr修饰的成员函数时出现的错误

今天学习了一下关于constexpr的知识,但是关于在类中使用constexpr修饰成员函数时调用后出现错误,不知道应该如何调用。

img

img


#include <iostream>
using namespace std;

class myType {
public:
    constexpr myType(const char* name, int age): name(name), age(age) {}
    constexpr const char* getname() const {
        return name;
    }
    constexpr int getage() const {
        return age;
    }
private:
    const char* name;
    int age;
};

int main() {
    constexpr struct myType mt("zhangsan", 10);
    constexpr const char* name = mt.getname();
    constexpr int age = mt.getage();
    cout << name << " " << age << endl;
    return 0;
}

name变量前也加个constexpr

Demo

#include <iostream>
#include <ctime>
#include <cstdlib>

constexpr int generate_random_number()
{
return rand() % 100;
}

int main()
{
srand(time(NULL));
std::cout << generate_random_number() << std::endl;
return 0;
}

const类型的类只能调用const类型的成员函数,原因是防止non_const类型的函数对其造成修改。因此需要在getname()后面加上const 即: getname() const

该回答引用ChatGPT
_请参考下面的解决方案,如果有帮助,还请点击 “采纳” _
在这段代码中,变量 mt 是 constexpr 的,所以它必须在编译期内定值,而它的成员函数 getname 没有被声明为内联函数,导致编译错误。

为了解决这个问题,我们需要在 getname 函数前加上 inline 关键字:

inline constexpr const char* getname() { return name; }

#include <iostream>
using namespace std;

//自定义类型的定义
class myType {
public:
    constexpr myType(const char* name, int age) : name(name), age(age) {}
    constexpr const char* getname() { return name; }
    constexpr int getage() { return age; }

private:
    const char* name;
    int age;
    //其它结构体成员
};

int main() {
    constexpr myType mt("zhangsan", 10);
    constexpr const char* name = mt.getname();
    constexpr int age = mt.getage();
    cout << name << " " << age << endl;
    return 0;
}