Visual Studio 11 使用 std::map 的编译时错误

Visual Studio 11 compile-time error using std::map

本文关键字:map 编译时错误 std Studio 使用 Visual      更新时间:2023-10-16

以下代码使用 gcc-4.5.1 编译,但不在 Visual Studio 11 中编译。

#include <map>
#include <array>
typedef std::pair<const unsigned int, std::array<const unsigned int, 4>> pairus;
int main(){
   std::map<const unsigned int, std::array<const unsigned int, 4> > x; 
   std::array<const unsigned int, 4> troll = {1, 2, 3, 4};
   x.insert(pairus(1, troll));
   auto z = x[1];
}

1 现在映射到 std::array<> troll 。插入效果很好,程序可以编译。但是,一旦我尝试auto z = x[1] -> 因此,尝试获取1映射到的数组巨魔,程序不会编译并显示以下错误:

error C2512: 'std::array<_Ty,_Size>::array':没有合适的默认构造函数可用

是什么原因导致 gcc 和 vs11 之间的行为差异以及如何解决它?

谢谢。

请尝试auto z = *x.find(1);[]运算符需要默认的可构造类型。事实上,整个容器需要一个默认的可构造类型,所以当你尝试各种实现时,除了随机运气之外,你真的不能指望任何东西。

您的类型不可分配,因为它包含常量。

x[1] 尝试返回可赋值的引用。 如果密钥尚不存在,它还将为密钥构造一个空值。 这两种情况对您的类型都无效。 您必须改用查找。