c++ - 带有未命名参数的私有(private)复制构造函数?

标签 c++ pointers constructor ampersand

我正在从基本的 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/

相关文章:

c++ - fopen 在 "w"模式下比在 "a"模式下花费更多时间

java - 将带有通配符的 Java 泛型编译为 C++ 模板

c++ - 何时使用指针,何时不使用它们

c - 在 C 中初始化结构 - 避免段错误

java - 如何重置构造函数的 getter 和 setter

c++ - 不存在的双递减?

c++ - 从 C++ 编写 .csv 文件

pointers - cuda统一内存: memory transfer behaviour

java - 将对象从 JDialog 传递回根框架

c++ - 为什么编译器需要复制构造函数,需要并拥有移动构造函数而不使用它们中的任何一个?