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“不是静态的”。除了没有正式定义之外,在什么意义上它不是静态的?为什么它不应该是隐式静态的,看看它似乎符合定义?
在什么意义上它不是静态的
它不是静态的,因为它没有静态存储持续时间。它具有自动存储期限。
对于大多数用途,存储持续时间是否静态并不重要,因为对象的初始化和销毁都很简单,并且根本不使用存储。尽管如此,这仍然表明了一个重要的区别:
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)