J'ai le code suivant avec lequel je jouais. J'ai une variable locale p
et j'ai une lambda qui imprime son adresse :
int main()
{
int p = 0;
auto lambda = [&p] {
std::cout << &p << std::endl;
};
lambda(); // 0x7fff78e6b7e0
}
L'adresse de la variable est la même peu importe combien de fois je cours le code. Mais je remarque que lorsque je change la définition de la lambda comme ceci :
auto lambda = [&p]() {
// ^^
C'est-à-dire quand j'ajoute une liste de paramètres vide, j'obtiens une nouvelle adresse :
lambda(); // 0x7fff2291a260
Vous pouvez le tester ici. Pourquoi cela arrive-t-il ? Je fais tourner mon code à la fois sur g++-4.8 et clang++ sur Windows.