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