在C++中通过值传递或通过常量引用传递是否更好?
我想知道哪个是更好的做法.我意识到通过常量引用传递应该在程序中提供更好的性能,因为你没有复制变量.
我的类有字符串变量,我想用传递给构造函数的值来初始化它们。
我的老师认为我们将字符串作为常量引用传递:
MyClass::MyClass(const std::string &title){
this->title = title
}
Run Code Online (Sandbox Code Playgroud)
但是 Clang-Tidy 建议使用 move 命令:
MyClass::MyClass(std::string title){
this->title = std::move(title)
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道在现代 C++ 中这样做的正确方法是什么。
我已经环顾四周,但没有什么能真正回答我的问题。提前致谢!
假设有一个Person这样的类:
// "string" is std::string, "move" is std::move
class Person
{
public:
// C++11 way: pass by value and std::move() from the value
Person(string name, string surname)
: m_name(move(name)), m_surname(move(surname))
{}
....
private:
string m_name;
string m_surname;
};
Run Code Online (Sandbox Code Playgroud)
假设我在某个循环中从某些源(例如文件)中读取name和surname值,并且在每次循环迭代中,我想创建Person具有这些读取值的值(例如,Person在某个容器中推送创建的).
以Person通常的方式调用构造函数是否更好:
Person(name, surname)
Run Code Online (Sandbox Code Playgroud)
还是std::move用于参数?
Person(move(name), move(surname))
Run Code Online (Sandbox Code Playgroud)