gpt4 book ai didi

c++ - 效率。函数返回值与输出参数

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:32 27 4
gpt4 key购买 nike

函数返回值与“输出”参数,哪个更快?我想我最好用我目前正在做的事情来解释。

// 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 位数据并且传递引用和指针一样快,是这样吗?

谢谢。 =)

最佳答案

两者的区别

mystring = f2(node)

f2(node)

理解很重要。在第一种情况下,大多数编译器会优化复制构造函数以按值返回,并简单地从函数中分配字符串而无需额外的复制步骤。对于第二个版本,大多数优化器将完全取消任何复制或赋值(根本没有赋值,返回的复制构造函数可以被优化掉)。

您关于 f2 与 f4 的陈述是准确的。由于 yield 优化,f2 很有可能胜过 f4。 (当我找到一篇好文章时,我会添加一个链接。)

哦,通过引用传递指针就好了。

关于c++ - 效率。函数返回值与输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3922101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com