为什么 constexpr const 作用域变量不是隐式静态的?

ein*_*ica 1 c++ lambda static constexpr storage-duration

(接着这个问题:)

void foo() {
    constexpr const auto my_lambda = [](int z) { return z+1; };
}
Run Code Online (Sandbox Code Playgroud)

显然,my_lambda“不是静态的”。除了没有正式定义之外,在什么意义上它不是静态的?为什么它不应该是隐式静态的,看看它似乎符合定义

eer*_*ika 5

在什么意义上它不是静态的

它不是静态的,因为它没有静态存储持续时间。它具有自动存储期限。

对于大多数用途,存储持续时间是否静态并不重要,因为对象的初始化和销毁​​都很简单,并且根本不使用存储。尽管如此,这仍然表明了一个重要的区别:

auto* foo() {
    constexpr const auto my_lambda = [](int z) { return z+1; };
    return &my_lambda; // dangling pointer
}

auto* foo_static() {
    static constexpr const auto my_lambda = [](int z) { return z+1; };
    return &my_lambda; // OK
}
Run Code Online (Sandbox Code Playgroud)