相关疑难解决方法(0)

在C++中通过值传递或通过常量引用传递是否更好?

在C++中通过值传递或通过常量引用传递是否更好?

我想知道哪个是更好的做法.我意识到通过常量引用传递应该在程序中提供更好的性能,因为你没有复制变量.

c++ variables constants pass-by-reference pass-by-value

203
推荐指数
6
解决办法
10万
查看次数

移动语义与常量引用

我的类有字符串变量,我想用传递给构造函数的值来初始化它们。

我的老师认为我们将字符串作为常量引用传递:

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++ 中这样做的正确方法是什么。

我已经环顾四周,但没有什么能真正回答我的问题。提前致谢!

c++ string reference move-semantics

5
推荐指数
1
解决办法
538
查看次数

移动参数或传递它们通常的C++ 98/03方式?

假设有一个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)

假设我在某个循环中从某些源(例如文件)中读取namesurname值,并且在每次循环迭代中,我想创建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)

c++ argument-passing move-semantics c++11

3
推荐指数
2
解决办法
206
查看次数