Dlaczego poniższy kod jest drukowany "xxY"? Czy zmienne lokalne nie powinny żyć w zakresie całej funkcji? Czy mogę użyć takiego zachowania, czy zmieni się to w przyszłym standardzie C++?Lokalny zakres zmiennej pytanie
Myślałem, że według standardu C++ 3.3.2 „Nazwa zadeklarowane w bloku jest lokalny dla tego bloku. Jego potencjalny zakres zaczyna się od jego punktu deklaracji, a kończy pod koniec jego deklaratywnej regionie.”
#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;
}
Bazując na odpowiedziach mogę przypuszczać, że MyClass(12345);
jest wyrazem (i zakres). To ma sens. Więc oczekiwać, że następujący kod wypisze „XYX” zawsze:
MyClass (12345), cout << "Y" << endl;
I to jest dozwolone, aby taki Zamiennik:
// 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
Twoje pytanie zawiera odpowiedź: * Nazwa zadeklarowana ... *. Nie ma imienia! – quamrana
W tym przykładzie: MyClass (12345) jest rzutem funkcji, a nie deklaracją. –
Nadal nie ma nazwy dla instancji – artificialidiot