Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::map access运算符已弃用?没有运算符[]与这些操作数匹配_C++_C++11 - Fatal编程技术网

C++ std::map access运算符已弃用?没有运算符[]与这些操作数匹配

C++ std::map access运算符已弃用?没有运算符[]与这些操作数匹配,c++,c++11,C++,C++11,根据,我可以使用m[k]或m.at(k)访问地图m中键k的值。然而,当我试着去做 derivMap[fx] 在我的代码中,其中derivMap是类型为std::mapVisualStudio2013的元素,它向我发出警告 没有运算符[]与这些操作数匹配 但是,当我将代码更改为 derivMap.at(fx) 我没有错。您对这个问题有什么见解吗?不受欢迎 我猜您试图在derivMap为const的上下文中调用运算符map::operator[]没有const重载,因为它可以在不存在与键匹配的元

根据,我可以使用
m[k]
m.at(k)
访问地图
m
中键
k
的值。然而,当我试着去做

derivMap[fx]
在我的代码中,其中derivMap是类型为
std::map
VisualStudio2013的元素,它向我发出警告

没有运算符[]与这些操作数匹配

但是,当我将代码更改为

derivMap.at(fx)
我没有错。您对这个问题有什么见解吗?

不受欢迎

我猜您试图在
derivMap
const
的上下文中调用运算符
map::operator[]
没有
const
重载,因为它可以在不存在与键匹配的元素时通过插入元素来修改映射<另一方面,code>map::at()确实有一个
const
重载,因为它被设计为在找不到元素时抛出

void foo(std::map<int, int>& m)
{
  int n = m[42]; // OK
}

void bar(const std::map<int, int>& m)
{
  int n = m[42]; // ERROR
}
void foo(标准::映射与建模)
{
int n=m[42];//好的
}
空栏(常数标准::映射和建模)
{
int n=m[42];//错误
}

我更喜欢
.find
而不是
.at
。我从来没有使用过
@MooingDuck我想这取决于缺少元素是否是错误(以及是否有C++11)。在我的例子中,问题是@juanchopanza正确建议的const环境,它也可能取决于方法签名,例如
void SomeClass::foo()const{int n=this->m[42]}
其中m是类“SomeClass”的字段。在这种情况下,const导致了这种行为。