Poniżej znajduje złe:Konst-Poprawność dla elementów kontenerów std
vector<const int> vec;
Problem polega na tym, że typ szablonu musi być przypisane. Poniższy kod kompiluje [EDIT: w Visual Studio 2010], wykazując problem z powyższym:
vector<const int> vec;
vec.push_back(6);
vec[0] += 4;
Przy bardziej skomplikowanych rodzajów, może to być poważny problem.
Moje pierwsze pytanie dotyczy tego, czy istnieje powód takiego zachowania. Wydaje mi się, że może być możliwe utworzenie kontenerów const, które uniemożliwiają powyższe i niestanowiące kontenerów, które na to pozwalają.
Po drugie, czy istnieje sposób na tworzenie kontenerów, które działają w ten sposób?
Po trzecie, co się tutaj dzieje (z typem użytkownika)? Rozumiem, że jest to niezdefiniowane zachowanie, ale w jaki sposób STL w ogóle to kompiluje?
Używasz standardowego libra w sposób, który jest niezdefiniowanym zachowaniem. Oznacza to, że * nie ma żadnych * wymagań co do tego, co powinno się wydarzyć. Niektóre operacje mogą wydawać się działać, inne nie. Nie można oczekiwać spójności między różnymi implementacjami. –
To nie kompiluje się na g ++ 4.6.3. –
Twój kod nie kompiluje się ze standardem C++. –