gpt4 book ai didi

c++ - 返回时如何避免复制

转载 作者:可可西里 更新时间:2023-11-01 17:07:54 26 4
gpt4 key购买 nike

我有一个返回 vector 或集合的函数:

set<int> foo() {
set<int> bar;
// create and massage bar
return bar;
}

set<int> afoo = foo();

在这种情况下,我在函数 foo() 中创建一个临时内存空间,然后通过复制将其分配给 afoo。我真的很想避免这个拷贝,任何简单的方法我可以在 C++11 中做到这一点吗?我认为这与右值相关。

好的,更新问题:如果我要返回一个自己定义的对象,不是 vector 或集合的东西,这是否意味着我应该定义一个移动构造函数?像这样:

class value_to_return {
value_to_return (value_to_return && other) {
// how to write it here? I think std::move is supposed to be used?
}
}

谢谢!!!

最佳答案

现代 C++ 编译器将实现:给定类型 T:

  • 如果 T 有一个可访问的复制或移动构造函数,编译器可能选择删除拷贝。这就是所谓的(命名)return valueoptimization (RVO) ,甚至在 C++11 之前就已指定,并且是大多数编译器都支持。
  • 否则,如果 T 有一个 move constructor , T 被移动(C++11 起)。
  • 否则,如果 T 有复制构造函数,则复制 T。
  • 否则,将发出编译时错误。

关于c++ - 返回时如何避免复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18157090/

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