【发布时间】:2017-04-08 19:41:50
【问题描述】:
以下代码在 linux 和 Visual Studio 2015 中编译后的行为有所不同。
#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;
}
Visual Studio 中的结果:
key: 0 value: 0
key: 1 value: 1
用g++ -std=c++11 -Wall -pedantic
编译的linux中的结果key: 0 value: 1
key: 1 value: 2
我有两个问题:
-
据我了解c++,VS的实现是对的。
如果我将代码更改为:for (int i=0; i < keyCount; i++) { unsigned int mapSize= map1.size(); map1[i] = mapSize; }
那么它在两个平台上的行为都像 Visual Studio。
代码不应该总是这样吗?
2.我可以使用哪些 Visual Studio 编译器设置来确保 VS 与 Linux 编译相同?
我在 Windows 上工作,但有一个必须在 Linux 上工作的任务。
【问题讨论】:
-
我想知道你为什么想要这样一张地图。
标签: c++ linux visual-studio-2015 stdmap