¿Por qué el siguiente código se imprime "xxY"? ¿No deberían las variables locales vivir en el ámbito de toda la función? ¿Puedo usar tal comportamiento o esto será cambiado en el futuro estándar de C++?Pregunta de alcance de variable local
pensé que de acuerdo a C++ estándar 3.3.2 "Un nombre declarado en un bloque es local a ese bloque. Su alcance potencial comienza en su punto de declaración y termina al final de su región declarativa."
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass(int) { cout << "x" << endl; };
~MyClass() { cout << "x" << endl; };
};
int main(int argc,char* argv[])
{
MyClass (12345);
// changing it to the following will change the behavior
//MyClass m(12345);
cout << "Y" << endl;
return 0;
}
Basándose en las respuestas I puede suponer que MyClass(12345);
es la expresión (y alcance). Eso tiene sentido. Así que espero que el siguiente código imprimirá "Xyx" Siempre:
MyClass (12345), cout << "Y" << endl;
y se deja de hacer dicha sustitución:
// this much strings with explicit scope
{
boost::scoped_lock lock(my_mutex);
int x = some_func(); // should be protected in multi-threaded program
}
// mutex released here
//
// I can replace with the following one string:
int x = boost::scoped_lock (my_mutex), some_func(); // still multi-thread safe
// mutex released here
Tu pregunta contiene la respuesta: * Un nombre declarado ... *. No hay nombre! – quamrana
En este ejemplo: MyClass (12345) es un molde de estilo de función, no una declaración. –
Aún así, no hay ningún nombre para la instancia – artificialidiot