访问成员 unordered_map 中的数据时,C++ const 方法在结构中编译错误

标签 c++ methods constants unordered-map

<分区>

我不明白我遇到的编译错误。下面是我的用例的一个简化示例。

#include <unordered_map>
#include <iostream>

#using namespace std;

struct C{
    unordered_map<int, string> m;

    C(){
        m[1] = "one";
        m[2] = "two";
    }

    int method() const{
        const string s = m[2];
        return 42;
    }
};

int main() {
    C c;
    cout << c.method() << endl;
    return 0;
}

以下是我的用例的要求:

  • 我想要方法method()成为const ,因为我确定它不会更改任何成员字段。
  • 成员字段m应该是 unordered_map (或任何哈希表)由于频繁的数据访问。

以上代码编译失败 error: passing ‘const std::unordered_map<int, std::__cxx11::basic_string<char> >’ as ‘this’ argument discards qualifiers [-fpermissive] .但是,如果我删除 const来自方法 method() (我不想或不能这样做),代码编译得很好。我不明白什么?有没有办法制作方法const在我的用例中?

顺便说一句,我在 Ubuntu 15.10 上使用 GCC 5.2.1 和 CLion 1.2.4。

最佳答案

std::unordered_map::operator[]

不是 const 方法,因为它会插入元素(如果不存在)。所以你不能在常量 m 上使用它。使用

std::unordered_map::at

相反。

关于访问成员 unordered_map 中的数据时,C++ const 方法在结构中编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34548947/

相关文章:

c++ - 当焦点转移到按钮被中断时,QPushButton 卡住绘图按下

Python - 从元组返回一个值

ios - Objective-C 的调用图或控制流图(iOS 应用程序)

java - 编译时常量和变量

c++ - 解释这个c++随机

c++ - 如何在另一个线程中执行一个方法?

c++ - 如何更改 std::priority_queue top() 的值?

c++ - 什么时候非静态 const 数据成员比 const 静态数据成员更有用?

c++ - 升级到我的操作系统后,我无法设置断点,也看不到 ddd/gdb 的流程

java - 如何将Array方法转换为ArrayList方法?