在下面的代码中,我尝试存储对另一个类的const引用:
struct A {
};
struct B {
constexpr B(A const & _a) : a(_a) {}
A const & a;
};
int main() {
constexpr A s1;
constexpr B s2{s1};
}然而,编译器(gcc 11.1)抱怨:
cctest.cpp: In function ‘int main()’:
cctest.cpp:12:22: error: ‘B{s1}’ is not a constant expression
12 | constexpr B s2{s1};
|我不明白为什么s1不是一个常量表达式。s1本身就是代码中的一个参数。我知道这可能与引用的生命周期有关,但我无法理解逻辑。在这个示例的代码中,我不想存储A的副本,我确实只想要一个引用或(智能)指针。所以:
s1不是一个常量表达式?非常感谢!
发布于 2021-05-26 11:12:24
note: address of non-static constexpr variable 's1' may differ on each invocation of the enclosing function; add 'static' to give it a constant address因此,您需要在这里添加一个static:
struct A {
};
struct B {
constexpr B(A const & _a) : a(_a) {}
A const & a;
};
int main() {
constexpr static A s1;
constexpr B s2{s1};
}https://stackoverflow.com/questions/67703646
复制相似问题