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
:C++中的泛型Lambda中的靜態自動變量14
- 什麼是可變
y
的類型?每次調用lambda時,y
的類型是否會改變? - 可變
y
初始化在每次調用盡管是static
?註釋分配// y = x
不需要更新變量y
的值。 - Is this C++ 14 Standard compliant?
如果我在每次打印中打印sizeof(y)
,我分別得到4,1,8和16。
On local and global static variables in C++
的通用拉姆達的'操作符(...)'是更多或更少的功能* -模板*。因此,將爲每個單獨的函數實例創建靜態變量。 – WhiZTiM