По сути, вы можете спросить, будет ли компилятор включать функцию someFunction () и будет ли он видеть, что someObject является одним и тем же экземпляром в каждом цикле, и если он это сделает, он потенциально «кэширует» возвращаемое значение не переоценивайте его.
Многое из этого может зависеть от того, какие настройки оптимизации вы используете, с VC ++, а также с любым другим компилятором, хотя я не уверен, что VC ++ дает вам столько же флагов, сколько и gnu.
Мне часто кажется невероятным, что программисты полагаются на компиляторы для оптимизации того, что они могут легко оптимизировать сами. Просто переместите выражение в первый раздел цикла for, если вы знаете, что оно будет вычисляться одинаково каждый раз:
Просто сделайте это и не полагайтесь на компилятор:
for (int i = (a - 1) * b, iMax = someObject->someFunction();
i < a * b && i < iMax; ++i)
{
// body
}