dwo*_*dgb 0 c++ parameters rvalue lvalue c++11
所以我有一个函数需要将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
Run Code Online (Sandbox Code Playgroud)
我该选哪个?另外,我不会修改函数中的向量,所以不应该添加const?我应该重载该功能并将它们组合在一起吗?
如果你打算在函数内复制它:
void myFunc(std::vector<char>);
Run Code Online (Sandbox Code Playgroud)如果你只想阅读参数而不复制它:
void myFunc(const std::vector<char>&);
Run Code Online (Sandbox Code Playgroud)如果要修改传递给函数的原始向量:
void myFunc(std::vector<char>&);
Run Code Online (Sandbox Code Playgroud)如果要优化rvalues 或者如果要将参数移动到函数中:
void myFunc(std::vector<char>&&);
Run Code Online (Sandbox Code Playgroud)如果您需要能够表示通过引用传递的可选参数:
void myFunc(const std::vector<char>*);
Run Code Online (Sandbox Code Playgroud)如果你需要传递一个你想修改的可选参数nullptr:
void myFunc(std::vector<char>*);
Run Code Online (Sandbox Code Playgroud)