Som*_*ger 2 c++ constructor reference class
我上课了.
class Books
{
private:
int m_books;
public:
Books(int books=0)
{
m_books = books;
}
Books(const Books &source) //Here is what I don't understand.
{
m_books = source.m_books;
}
};
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它必须是Books(const Books &source),而不是Books(const Books source).
当你有
Books(const Books &source)
Run Code Online (Sandbox Code Playgroud)
源通过引用传递.当你有
Books(const Books source)
Run Code Online (Sandbox Code Playgroud)
它本来是通过价值传递的.但要传递值,您就是复制构造函数.因此,为了避免无限递归,复制构造函数必须接受引用.
Books(const Books &source)
Run Code Online (Sandbox Code Playgroud)
表示传递了一个引用,而不是实际的变量(如pass-by-value,就像诸如intor 之类的基元一样char).
在这种情况下,由于您正在构建复制构造函数,因此您不希望对传入其引用的对象进行修改,因此参数签名带有前缀const(这可以保证传入的参数是不可变的)
(注意,最重要的是:这里的值传递将引入无限递归 - 请参阅@AProgrammer的答案)除此之外,传递source值也是不必要的(意思是:在复制时制作整个源的副本)构造函数被调用),我们只是使用引用.
您可能感兴趣的附加阅读:C++ Pass by Reference vs. Value