【发布时间】:2015-10-26 20:41:18
【问题描述】:
即使 v.at(idx) 理论上可以抛出 out_of_range 异常,但实际上不是由于边界检查,声明以下函数 noexcept 是否安全?
int get_value_or_default(const std::vector<int>& v, size_t idx) noexcept {
if (idx >= v.size()) {
return -1;
}
return v.at(idx);
}
【问题讨论】:
-
加一个,但这不一定安全。如果另一个线程修改了
v,会发生什么? -
@Bathsheba,那么代码已经具有未定义的行为,因为它调用
v.size()和v.at(idx)没有同步,所以担心这些事情是没有意义的。要么没有发生,要么程序有更大的问题。 -
此代码不是线程安全的。但是,这个问题似乎只针对单线程情况。
-
你也可以返回
v[idx]- 没有必要检查两次范围 -
@GuyRT 可能是为了示例