今天学习了一下关于constexpr的知识,但是关于在类中使用constexpr修饰成员函数时调用后出现错误,不知道应该如何调用。
#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;
}