Tenho a seguinte pergunta sobre lambdas em C++: Por que a primeira captura (em pf) por referência l-value não é permitida, mas a segunda é (pf2)?
Não estou argumentando, de uma forma ou de outra, que isso &z = z * 10
deveria ser permitido; quero entender a razão técnica por trás do erro do compilador afirmando que isso não é permitido ( error: cannot capture (10 * z) by reference
).
Muito obrigado antecipadamente. Esta comunidade é incrível, e peço desculpas antecipadamente se houve perguntas repetidas sobre o mesmo tópico no passado. Não consegui encontrá-las.
#include <iostream>
#include <utility>
using namespace std;
int main () {
int z = 10;
// not allowed
auto pf = [&z = 10*z](int x) {
++z;
cout << "z: " << z << endl;
return z; };
// allowed
auto pf2 = [&z = z](int x) {
++z;
cout << "z: " << z << endl;
return z;
};
cout << "pf: " << pf(20) << endl;
cout << "pf: " << pf(20) << endl;
cout << "pf2: " << pf2(20) << endl;
cout << "pf2: " << pf2(20) << endl;
return 1;
}