如果我有如下界面:
templateV get(K key); // Return the value of the key
规范"在找不到密钥时返回NULL"是否有意义?除了抛出异常之外,还没有找到密钥时处理这种情况吗?
还有一个例外处理这里处理不存在的密钥的最佳方法吗?
你不能假设这V
是一个指针.例如,如果V
是int
,则不能return
,nullptr
因为它不是有效值int
.如果V
是指针类型,请考虑它是否nullptr
是一个有效的值,以便将其插入到地图中.如果是这样,怎么可能主叫区分nullptr
被return
编表示"未发现",从"实际" nullptr
?
如果您可以return
指向地图中的项目而不是副本,请考虑此签名.
templateV * get(K key);
使用const V *
,如果你宁愿没有来电修改对象在地图中.
或者,您可以使用optional
.您可以在Boost中找到实现,也可以作为标准库的实验扩展.
当然,您也可以throw
使用例外来指示您的地图中没有该密钥.但是,如果您的客户有合理的方式提前知道密钥是否存在,那么大多数编码标准只会被认为是好的风格.应使用例外来表示异常,错误的情况.地图中不存在密钥的事实不太可能符合这一要求,除非在您的情况下,可以假设密钥集是已知的.