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