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++ 14
- Какой тип переменной
y
? Изменяется ли типy
при каждом вызове лямбда? - Является переменным
y
, инициализированным в каждом звонке, несмотря на то, что онstatic
? Запрошенное задание// y = x
не требуется для обновления значения переменнойy
. - Является ли это поведение стандартом C++ 14?
Если я печатаю sizeof(y)
в каждом звонке, я получаю 4, 1, 8 и 16 соответственно.
On local and global static variables in C++
родового Lambda в 'оператор (...)' более или менее * функция -template *. Следовательно, статические переменные будут созданы для каждого отдельного экземпляра функции. – WhiZTiM