gpt4 book ai didi

c++ - 将 size() 用于 for 构造中的第二个表达式总是不好的吗?

转载 作者:可可西里 更新时间:2023-11-01 16:51:37 27 4
gpt4 key购买 nike

在下面的示例中,我是否应该期望每次循环时都会调用 values.size()?在这种情况下,引入一个临时的 vectorSize 变量可能是有意义的。或者现代编译器是否应该能够通过识别 vector 大小不能改变来优化调用。

double sumVector(const std::vector<double>& values) {
double sum = 0.0;
for (size_t ii = 0; ii < values.size(); ++ii) {
sum += values.at(ii);
}
}

请注意,我不关心是否有更有效的方法来对 vector 的内容求和,这个问题只是关于在 for 结构中使用 size()。

最佳答案

这是一种明确的方法 - size() 只被调用一次。

for (size_t ii = 0, count = values.size();  ii < count;  ++ii)

编辑:我被要求实际回答这个问题,所以这是我最好的机会。

编译器通常不会优化函数调用,因为它不知道从一次调用到下一次调用是否会得到不同的返回值。如果循环内有无法预测其副作用的操作,它也不会优化。内联函数可能会有所不同,但不能保证。编译器更容易优化局部变量。

有些人会称之为过早优化,我同意在极少数情况下您会注意到速度差异。但是,如果它不会使代码更难理解,为什么不将其视为最佳实践并继续使用呢?它当然不会造成伤害。

附言我在阅读 Benoit's 之前写了这篇文章仔细回答,我相信我们完全一致。

关于c++ - 将 size() 用于 for 构造中的第二个表达式总是不好的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/166641/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com