Logvinov_Leon's blog

By Logvinov_Leon, 11 years ago, In Russian

Сегодня я наткнулся на одну очень не приятную багу. Рассмотрим следующий код.

#include <iostream>
#include <map>
using namespace std;
int main(){
	map<int,int> m;
	m[0]=m.size();
	cout<<m[0]<<endl;
}

Как вы думаете, что выведет программа? Логично было бы 0. Ведь map изначально пуст. И Visual Studio 2008 express действительно выводит 0. Но вот если пользоваться g++ то на выходе окажется единица. Меня давно предупреждали в ЛКШ, что студия является компилятором неизвестного языка, но тут g++ повёл себя не адекватно. Если я правильно понимаю, то сначала должен вычисляться правый операнд оператора присвоить. Если я не прав, то объясните где. А если кто знает что-то подобное, то прошу поделиться опытом.

  • Vote: I like it
  • +8
  • Vote: I do not like it