首页 > 解决方案 > 必须仅使用 C++ 中的静态对象初始化 constexpr 引用吗?

问题描述

如果仅使用另一个对象constexpr初始化引用,如示例中所示:constexpr

int main() {
    constexpr int a = 0;
    constexpr const int & b = a;
}

然后 GCC 和 Clang 都拒绝它说constexpr variable 'b' must be initialized by a constant expression, address of non-static constexpr variable 'a' may differ on each invocation of the enclosing function; add 'static' to give it a constant address

同时 MSVC 接受了这个例子。演示:https ://gcc.godbolt.org/z/Whv7YeWKW

所有编译器在添加static到以下代码后都接受代码:

static constexpr int a = 0;

演示:https ://gcc.godbolt.org/z/abeP4z64E

标准是否真的要求constexpr仅使用静态对象初始化任何引用?

标签: c++language-lawyerconstexpr

解决方案


推荐阅读