【发布时间】:2021-09-10 15:51:20
【问题描述】:
static constexpr int = 0;
AFAIK,在 C++ 中:
-
static确保整个执行过程中的终身内存地址以及并发线程的安全初始化 -
constexpr确保时间编译评估为右值,这意味着它不应有内存地址
在我看来,它们很矛盾。 static 确保变量将具有长期内存地址,而 constexpr 确保相反的假设。令人惊讶的是,第一个链接中的讨论提到了这一点:
constexpr int x = 3;
const int* p = &x;
如果x是右值,我们怎么才能获得内存地址呢?
谁能解释一下?
【问题讨论】:
-
您能否更明确地询问您是在询问本地范围静态还是命名空间范围静态?它们具有不同的含义,您所说的理解并不适用于两者。
-
我不相信
constexpr和值类别(评估为右值)有任何联系。 -
我的问题来自于看到许多班级成员声明
static constexpr,我不确定应该是哪种。无论如何,你能简单解释一下吗? -
您的第一个链接与没有地址的
constexpr变量特别矛盾。 -
@Victor 静态类成员与其他静态类成员更加不同。您应该说明您的问题。