从size_t转换为int,或者用size_t迭代?

Nic*_*ton 8 c++

是否更好地将迭代器条件从右操作数转换size_tint,或者迭代可能超过最大值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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*ins 7

我几乎总是使用第一个变体,因为我发现大约80%的时间,我发现some_func应该也可以使用size_t.

如果实际上some_func需要一个signed int,你需要知道当vect变大时会发生什么INT_MAX.如果解决方案是不是在您的情况明显(通常是没有),你至少可以代替some_func((int)i)some_func(numeric_cast<int>(i))(见Boost.org一个实施numeric_cast的).当vect比你计划的更大时,它具有抛出异常的优点,而不是默默地回绕到负值.