Во-первых, индексирование массива не очень дорого (только как одна операция, более дорогая, чем разыменование указателя, или иногда вообще ничего, в зависимости от ситуации).
Во-вторых, большинство компиляторов будут выполнять то, чтовызывается RVO или оптимизация возвращаемого значения при возврате структур по значению.Именно здесь вызывающая сторона выделяет пространство для возвращаемого значения вызываемой им функции и тайно передает адрес этой памяти функции, которую она будет использовать, и в результате этого копии не создаются.Он делает это автоматически, поэтому
struct mystruct blah = func();
Создает только один объект, передает его в func для прозрачного использования программисту, и копирование не требуется.
Что я не делаюзнаю, что если вы присваиваете массиву индекс возвращаемое значение функции, например:
someArray[0] = func();
, компилятор передаст адрес someArray[0]
и выполнит RVO таким образом, или он просто не сделает этогооптимизация?Для этого вам понадобится более опытный программист.Я бы предположил, что компилятор достаточно умен, чтобы сделать это, но это всего лишь предположение.
И да, я бы назвал это микрооптимизацией.Но мы программисты на Си.И вот как мы катимся .