我有一个符号表实现为std::map.对于该值,无法通过默认构造函数合法地构造值类型的实例.但是,如果我不提供默认构造函数,我会收到编译器错误,如果我使构造函数断言,我的程序编译得很好,但map<K,V>::operator []如果我尝试使用它来添加新成员,则会崩溃.
有没有办法让C++ map[k]在编译时禁止作为l值(同时允许它作为r值)?
顺便说一句:我知道我可以使用插入地图Map.insert(map<K,V>::value_type(k,v)).
编辑:有几个人提出的解决方案相当于改变值的类型,以便映射可以构造一个而不调用默认构造函数.这与我想要的完全相反,因为它将错误隐藏到以后.如果我愿意这样做,我可以简单地从构造函数中删除断言.我想要的是让错误更快发生; 在编译时.然而,似乎没有办法区分r值和l值使用,operator[]所以看起来我想要的不能这样做,所以我只需要免除一起使用它.