因此,我试图为Orbit类编写一个副本构造函数:
class Orbit
{
private:
vector<int> m_start;
public:
// ...
const vector<int>& getStart() {return start; }
}
Run Code Online (Sandbox Code Playgroud)
像那样:
Orbit::Orbit(const Orbit& toCopy)
{
m_start = toCopy.getStart();
}
Run Code Online (Sandbox Code Playgroud)
但是我得到的是:
orbit.cpp:60:29: error: passing ‘const Orbit’ as ‘this’ argument discards qualifiers [-fpermissive]
m_start = toCopy.getStart();
Run Code Online (Sandbox Code Playgroud)
做什么?
您需要使getStart()成员函数const。这就是编译器告诉您的。
const vector<int>& getStart() const {return start; }
Run Code Online (Sandbox Code Playgroud)
此外,在这种情况下,您可以使用编译器生成的副本构造函数。它将按成员进行复制,这对很好std::vector<int>。这样做的好处是,编译器还将为您生成move构造函数和move赋值运算符(提供自定义副本构造函数可以防止这种情况发生),如果您有std::vector数据成员,这是有意义的,因为这些对于移动构造而言很便宜。
你必须让自己的方法 const
const vector<int>& getStart() const {return start; }
Run Code Online (Sandbox Code Playgroud)