【发布时间】:2010-10-13 08:57:59
【问题描述】:
函数返回值与“输出”参数,哪个更快?我想我最好用我目前正在做的事情来解释。
// 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*,但它们会导致模棱两可的调用。此外,通常只需要 SceneNode*。 f3 中的 String& 会带来一些不便和开销,所以我打算 f1 和 f2。
我的问题是,会不会有区别
f2(node); // return value not assigned.
// will there be an optimisation NOT to copy string?
mystring = f2(node);
我的猜测是函数参数存储应该在一些访问速度非常快的区域,并且随时可用,因此输出参数工作得更快。但是,如果进行优化以防止在 f2 中复制字符串,则 f2 将优于 f4。
我知道在我的例子中,这可能是最小的,但我只是为了知识/兴趣而想知道。
另一个问题:我总是假设引用是 32 位数据,并且传递引用与指针一样快,是这样吗?
谢谢。 =)
【问题讨论】:
标签: c++ function parameters return