【发布时间】:2018-08-01 17:55:37
【问题描述】:
以下是证据:
inline
constexpr std::size_t prev(std::size_t i) {
--i;
return i;
}
int main() {
static const std::size_t i = 0;
static_assert(prev(i) == std::size_t(-1), "Decrementing should give std::size_t(-1)");
return 0;
}
用-std=c++14 编译很愉快。
我遇到这个是因为我有一个循环索引 std::vector 并想向后循环,所以我将其更改为
for (std::size_t i = std::min(idx, v.size() - 1); i != std::size_t(-1); --i) { ... }
现在,我意识到我可以使用 std::vector::reverse_iterator,但我现在真正的问题是,我期望的行为是否明确?
【问题讨论】:
-
@Justin 这些是关于无符号整数溢出,而不是这里发生的下溢。
-
迄今为止我发现的最好的骗子:stackoverflow.com/questions/15172936/…
-
this one 呢?
标签: c++ undefined-behavior integer-overflow unsigned-integer