相关疑难解决方法(0)

使用std :: map <K,V>其中V没有可用的默认构造函数

我有一个符号表实现为std::map.对于该值,无法通过默认构造函数合法地构造值类型的实例.但是,如果我不提供默认构造函数,我会收到编译器错误,如果我使构造函数断言,我的程序编译得很好,但map<K,V>::operator []如果我尝试使用它来添加新成员,则会崩溃.

有没有办法让C++ map[k]在编译时禁止作为l值(同时允许它作为r值)?


顺便说一句:我知道我可以使用插入地图Map.insert(map<K,V>::value_type(k,v)).


编辑:有几个人提出的解决方案相当于改变值的类型,以便映射可以构造一个而不调用默认构造函数.这与我想要的完全相反,因为它将错误隐藏到以后.如果我愿意这样做,我可以简单地从构造函数中删除断言.我想要的是让错误更快发生; 在编译时.然而,似乎没有办法区分r值和l值使用,operator[]所以看起来我想要的不能这样做,所以我只需要免除一起使用它.

c++ stl map compile-time

42
推荐指数
3
解决办法
1万
查看次数

标签 统计

c++ ×1

compile-time ×1

map ×1

stl ×1