gpt4 book ai didi

C++ 左值、右值、引用、参数和性能

转载 作者:太空宇宙 更新时间:2023-11-04 15:01:57 26 4
gpt4 key购买 nike

所以我有一个函数需要将 std::vector 作为参数。我想知道声明参数的最佳方式,这样底层数组就不会被深度复制,因为它可能相当大。

// which should I choose?
void myFunc(std::vector<char>); // 1
void myFunc(std::vector<char>&); // 2
void myFunc(std::vector<char>&&); // 3
void myFunc(std::vector<char>*) // 4

我应该选择哪个?另外,我不会修改函数中的 vector ,所以我不应该添加 const 吗?我是否应该重载该函数并将它们结合起来?

最佳答案

  1. 如果您打算在函数内复制它:

    void myFunc(std::vector<char>);
  2. 如果您只想阅读论点而不复制它:

    void myFunc(const std::vector<char>&);
  3. 如果要修改传递给函数的原始 vector :

    void myFunc(std::vector<char>&);
  4. 如果你想优化右值或者如果你想move函数的参数:

    void myFunc(std::vector<char>&&);
  5. 如果您需要能够表示通过引用传递的可选参数:

    void myFunc(const std::vector<char>*);
  6. 如果您需要传递一个非nullptr 时要修改的可选参数:

    void myFunc(std::vector<char>*);

关于C++ 左值、右值、引用、参数和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32810939/

26 4 0
文章推荐: JavaScript 语句在 IE 中不起作用
文章推荐: Java 小程序无法与小程序的远程调试一起使用
文章推荐: javascript - 查询 : Add Existing