特别是我试图围绕boost :: dynamic_bitset创建一些包装函数 . 有一个类似的问题,虽然我希望在不创建额外类的情况下提供更紧凑的解决方案 . 相关片段:

typdef boost::dynamic_bitset<> BitWorld;
class Game{
    struct Grid{
        int size;
        BitWorld world;
    } grid;
public:
    BitWorld::reference& operator()(int x, int y) { return grid.world[x+y*grid.size]; }
    BitWorld::reference& operator[](int index) { return grid.world[index]; }
}

使用MSVC13_64这不会给我任何错误,虽然它在测试时会产生非常奇怪的行为,MinGW492_32我得到这样的错误:

C:\ repositories \ .. \ logic \ game_prim.h:78:错误:从类型'boost :: dynamic_bitset <的右值'初始化'boost :: dynamic_bitset <> :: reference&'类型的非const引用> :: reference'BitWorld :: reference&operator [](int index){return grid.world [index]; } ^

我不明白为什么他们在代理引用上使用变异操作这么简单 . 简单的转换也不起作用,const_cast不能在rvalue和lvalue引用之间转换,我也没有在static_cast上取得太大成功 .