Poniższy kod działa inaczej po kompilowane w systemie Linux i Visual Studio 2015.std :: map realizacja zależy od linux i windows
#include <map>
#include <iostream>
using namespace std;
int main(void)
{
map<int, int> map1;
int keyCount = 2;
for (int i = 0; i < keyCount; i++)
{
map1[i] = map1.size();
}
for (auto value : map1)
{
cout << "key: " << value.first << " value: " << value.second << endl;
}
return 0;
}
wynik w Visual Studio:
key: 0 value: 0
key: 1 value: 1
Wynik w skompilujesz z g ++ -std = C++ 11 -Wall -pedantic
key: 0 value: 1
key: 1 value: 2
Mam dwa pytania:
O ile mi zrozumieć, C++, realizacja VS ma rację.
Gdybym zmienić kod do:for (int i=0; i < keyCount; i++) { unsigned int mapSize= map1.size(); map1[i] = mapSize; }
wtedy zachowuje się jak Visual Studio na obu platformach.
Czy ten kod nie powinien zachowywać się w ten sposób?
2. Jakie ustawienia kompilatora Visual Studio mogę użyć, aby upewnić się, że VS skompiluje się tak samo jak Linux?
Pracuję w systemie Windows, ale mam zadanie, które musi działać w systemie Linux.
Zastanawiam się, dlaczego chcesz taką mapę. –