Функция возвращает значения в зависимости от параметра «выход», какой из них быстрее? Я думаю, что лучше объяснить, используя то, над чем я сейчас работаю.
// specify identifier and return pointer.
SceneNode* createSceneNode(const String& desired_identifier); // f1
// auto-gen identifier and return as string.
String createSceneNode(SceneNode*& out_ptr_to_creation); // f2
// auto-gen identifier and return pointer to node
SceneNode* createSceneNode(String& out_gen_identifier); // f3
// auto-gen identifier and return as string.
void createSceneNode(SceneNode*& out_ptr_to_creation, String& out_gen_identifier); // f4
Хотя я предпочитаю f1 и f3, потому что они возвращают SceneNode *, они приводят к вызову ambiguos. Кроме того, часто требуется только SceneNode *. String & в f3 будет представлять некоторые неудобства и накладные расходы, поэтому я планирую f1 и f2.
Мой вопрос, будет ли разница между
f2(node); // return value not assigned.
// will there be an optimisation NOT to copy string?
mystring = f2(node);
Я предполагаю, что хранилище параметров функции должно находиться в некоторой области очень быстрого доступа и будет легко доступно, чтобы выходные параметры работали быстрее. однако, если оптимизация выполнена для предотвращения копирования строки в f2, то f2 будет лучше, чем f4.
Я знаю, что в моем примере это может быть минимальным, но я просто хочу знать, ради интереса.
еще один побочный вопрос: я всегда предполагаю, что ссылки - это 32-битные данные, а проходная ссылка - так же быстро, как указатели, не так ли?
Спасибо. =)