如果我有如下界面:
template <typename V, typename K>
V get(K key); // Return the value of the key
当找不到密钥时,规范&#34;是否返回NULL&#34;合理?除了抛出异常之外,还没有找到除钥匙之外的情况吗?
这也是抛出异常处理不存在的密钥的最佳方法吗?
答案 0 :(得分:5)
您不能假设V
是指针。例如,如果V
为int
,则return
不能nullptr
,因为它不是int
的有效值。如果V
是指针类型,请考虑nullptr
是否为将其插入地图的有效值。如果是这样,调用者怎么能将nullptr
return
与“实际”nullptr
中的“未找到”区分开来?
如果你没有return
指向地图中项目的指针而不是副本,请考虑此签名。
template <typename V, typename K>
V * get(K key);
如果您不想让调用者修改地图中的对象,请使用const V *
。
或者,您可以使用optional<T>
。您可以在Boost以及an experimental extension to the standard library中找到实施。
当然,您还可以throw
一个例外来表明您的地图中没有该密钥。但是,如果您的客户有合理的方式提前知道密钥是否存在,那么大多数编码标准只会被认为是好的风格。应使用例外来表示异常,错误的情况。地图中不存在密钥的事实不太可能符合这一要求,除非在您的情况下,可以假设密钥集是已知的。