【发布时间】:2017-02-22 16:08:14
【问题描述】:
class A {
public:
int a;
char b;
double c;
A ( int x, char y, double z ) : a(x), b(y), c(z){}
};
int main(){
auto lambda = []( auto x ) {
static auto y = x;
// y = x;
return y;
};
int a = lambda(1);
char b = lambda('a');
double c = lambda(1.5);
A d = lambda( A( 2, 'b', 2.5 ) );
return 0;
}
此代码在 Clang 3.8.0 和 GCC 5.4.0 中编译,并且工作正常。但是,考虑到变量y 是static:
- 变量
y的类型是什么?y的类型是否会在每次调用 lambda 时发生变化? - 变量
y是否在每次调用中初始化,尽管是static?不需要注释赋值// y = x来更新变量y的值。 - 这种行为是否符合 C++14 标准?
如果我在每次调用中打印 sizeof(y),我将分别得到 4、1、8 和 16。
【问题讨论】:
-
通用 lambda 的
operator (...)或多或少是一个函数模板。因此,将为函数的每个单独实例创建静态变量。
标签: c++ lambda static c++14 auto