我正在从基本的 CPU 模拟器中读取一些 C++ 代码,但我无法理解这一点:
class CPU {
private:
CPU (const CPU&){}
};
我理解指针,我也检查了这个:Ampersand & with const in constructor 。显然它是一个(硬)复制构造函数,但我不明白,它是如何工作的?为什么常量?为什么 & 符号最后没有 var 名称?为什么是私有(private)的?我在我的书或 cplusplus.com 中没有找到这样的例子。
附注:
int foo(int var) { cout << var; }
int bar(int &var) { cout << var; }
foo 和 bar 打印同样的东西? bar 本质上是打印 *&var?
感谢任何帮助!
最佳答案
它不起作用。这里的关键词是私有(private)
。整个构造的作用是创建一个只能从成员函数调用的复制构造函数,从而有效地禁用该行为。通常人们会省略函数体,这样如果从成员函数调用它,也会出现链接错误。
用 C++11 的说法,这将实现为
CPU(const CPU&) = delete;
如果你真的尝试诱导它:
CPU x;
CPU y(x); // this is the one that matches the parameters
您会收到编译器错误,因为您不是成员函数,但您正在尝试调用私有(private)函数。
他们这样做的原因是因为他们想要禁用该功能 - 您无法使用复制构造函数创建这些对象之一。
“const CPU&”的意思是“引用 const CPU”。省略变量名是合法的,因为函数从不引用它,但它必须与参数模式匹配。
关于c++ - 带有未命名参数的私有(private)复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230293/