zoukankan      html  css  js  c++  java
  • C++ error: passing 'const std::map<>]' discards qualifiers或pass-by-reference-to-const-map导致的“discards qualifiers”

    产生问题的场景:

    int func(const map<int, string> &aMap)  {
             string value = amap[0];  }

    或者

    int  Test::func()const

    {

           string value = amap[0];                 //amap是Test类的成员函数.是就会产生传说中的null引用。

    }

    用g++编译上面的代码,会报……discards qualifiers。
           这里是原因


           简单来说,map的[]运算符会在索引项不存在的时候自动创建一个对象,有可能会改变map本身,所以不能够用在一个const map上。

    解决办法有两个:


                      方法1、不要将形参声明为const
                      方法2、用find代替[]

                            不过第二中方法存在风险,因为end()->second是合法的,于

  • 相关阅读:
    doc
    doc
    doc
    doc
    doc
    doc
    doc
    doc
    java基础知识系列--- 反射,注解,泛型,内省
    CCProcxy代理服务器的配置使用
  • 原文地址:https://www.cnblogs.com/wanghetao/p/3379590.html
Copyright © 2011-2022 走看看