繁体   English   中英

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

[英]Cast from size_t to int, or iterate with size_t?

将iterator条件右操作数从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;
    }
}

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

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

我只是将它size_t ,因为没有充分的理由不这样做。 你是什​​么意思“或者可能迭代到type_t的最大值”? 你只是迭代到vect.size()的值。

对于大多数编译器来说,它不会有任何区别。 在32位系统上,显而易见,但即使在64位系统上,这两个变量也可能存储在64位寄存器中,并作为64位值在堆栈上推送。

如果编译器将int值存储为堆栈上的32位值,则第一个函数在CPU周期方面应该更有效。

但差异可以忽略不计(虽然第二个功能“看起来”更清洁)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM