Можно ли изменить порядок передачи функций в функцию
int func1(int a, b)
{
return a + b;
}
int func2(int a)
{
return a + 2;
}
int func3(int a)
{
return a * 2;
}
int main()
{
for(int i = 0;i < 10;i++)
{
std::cout << func1(func2(i), func3(i));
}
}
Когда я отлаживал подобный код то заметил что в функцию func1 первым аргументом передаётся func3 а затем func2 для меня это проблема т.к. я написал относительно большой код не учитывая этой особенности языка, и теперь меня интересует можно-ли как-то изменить порядок передачи в функцию что бы сначала выполнилась func2 затем func3 а после func1
Ответы (1 шт):
В стандарте с++ порядок вычисления аргументов не определен и компилятор имеет право вычислять в любом порядке.
Делайте просто предварительное вычисление
int func1(int a, b)
{
return a + b;
}
int func2(int a)
{
return a + 2;
}
int func3(int a)
{
return a * 2;
}
int main()
{
for(int i = 0;i < 10;i++)
{
auto a1 = func2(i);
auto a1 = func3(i)
std::cout << func1(a1, a2);
}
}
Если же функции возвращают что то сложное (например, std::vector по значению с миллионом элементов), возможно нужно будет использовать rvalue ссылки с move семантикой, что бы улучшить производительность.