将迭代器条件右操作数从 size_t
转换为 int
更好,还是迭代可能超过 int
的最大值?答案实现具体吗?
int a;
for (size_t i = 0; i < vect.size(); i++)
{
if (some_func((int)i))
{
a = (int)i;
}
}
int a;
for (int i = 0; i < (int)vect.size(); i++)
{
if (some_func(i))
{
a = i;
}
}
最佳答案
我几乎总是使用第一个变体,因为我发现大约 80% 的时间,我发现 some_func
应该也需要一个 size_t。
如果事实上some_func
采用带符号的 int,您需要了解当 vect 大于 INT_MAX
时会发生什么.如果解决方案在您的情况下不明显(通常不是),您至少可以替换 some_func((int)i)
与 some_func(numeric_cast<int>(i))
(有关 numeric_cast 的一种实现,请参见 Boost.org)。这样做的好处是当 vect 变得比您计划的大时抛出异常,而不是静静地环绕到负值。
关于c++ - 从 size_t 转换为 int,还是用 size_t 迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267915/