我刚刚发现一个constexpr
方法可以正确返回在执行过程中发生变化的类成员的值。我的问题是,如果constexpr
方法应该在编译时完全评估,这怎么可能?
下面的示例正确输出Value: 0
然后Value: 5
. 更重要的是,如果我将其更改a.change(5)
为编译器无法预测的内容(例如,a.change(atoi(argv[1]))
它a.change(rand() % 10 + 1)
仍然可以工作。为什么?为什么它甚至可以编译?
#include <iostream>
class A
{
public:
void change(int value) { x = value; }
int get() const { return x; }
constexpr int value() const noexcept { return x; }
private:
int x{0};
};
int main()
{
A a;
std::cout << "Value: " << a.get() << std::endl;
a.change(5);
std::cout << "Value: " << a.get() << std::endl;
}
先感谢您