Visual Studio 11 使用 std::map 的编译时错误
Visual Studio 11 compile-time error using std::map
以下代码使用 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] 尝试返回可赋值的引用。 如果密钥尚不存在,它还将为密钥构造一个空值。 这两种情况对您的类型都无效。 您必须改用查找。
相关文章:
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 如何在常量计算表达式中获取编译时错误?
- C++根据调用的构造函数强制编译时错误
- 使用 std::iterator_traits<> 时编译时错误不明确
- is_same和variadic模板编译时错误无效转换
- 私有运营商删除会触发 GCC 和 Clang 的编译时错误,但不会在 MSVC 上触发编译时错误
- 运行时与编译时多态性:更好的可读性与编译时错误检查,更重要的是
- 引发编译时错误
- 为什么调用不明确的 ctor 时没有编译时错误?
- 在 sizeof 运算符上强制编译时错误
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 从Mac上的终端编译时C 错误
- 使用MINGW-W64使用-M32选项(32位代码)编译时错误
- C++线程错误 - 带有类参数的编译时错误
- 如果编译时间构量参数是错误的,则生成编译时错误
- 尝试调用指向成员函数的函数指针时出现编译时错误
- 编译时错误:删除了联合默认构造函数
- 初始化启动对象时出现编译时错误
- Visual Studio 11 使用 std::map 的编译时错误
- map非const函数,在clang++下编译时错误,适用于g++