Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将禁用的复制构造函数置于专用模式_C++_C++11_Copy Constructor - Fatal编程技术网

C++ 将禁用的复制构造函数置于专用模式

C++ 将禁用的复制构造函数置于专用模式,c++,c++11,copy-constructor,C++,C++11,Copy Constructor,要禁用复制构造函数和赋值运算符,很明显我们可以这样做,因为c++11: class A { public: A(const A&) = delete; A& operator=(const A&) = delete; } 或对于c++03: class A { private: A(const A&); A& operator=(const A&); } 但是,这会发生什么: class A { private: A

要禁用复制构造函数和赋值运算符,很明显我们可以这样做,因为c++11:

class A {
 public:
  A(const A&) = delete;
  A& operator=(const A&) = delete;
} 
或对于c++03:

class A {
 private:
  A(const A&);
  A& operator=(const A&);
}
但是,这会发生什么:

class A {
 private:
  A(const A&) = delete;
  A& operator=(const A&) = delete;
}

我想这也会导致同样的结果。有副作用吗

您对已删除函数的访问权限无关紧要——它根本不存在(imk_),因此无论调用方如何都无法访问它

错误消息可能会稍微让人困惑。请参阅第一个错误是关于“private”而不是“deleted”的示例


“它不存在”是一种简化。它存在于它参与重载解析的意义上,但如果它是所选函数,则是一个错误。因此

struct only_double {
    only_double(intmax_t) = delete;
    only_double(double arg);
};
only_double zero(0); // Error - deleted constructor called

无论您对已删除的函数授予何种访问权,它都不存在(imk_),因此无论调用方如何都无法访问它

错误消息可能会稍微让人困惑。请参阅第一个错误是关于“private”而不是“deleted”的示例


“它不存在”是一种简化。它存在于它参与重载解析的意义上,但如果它是所选函数,则是一个错误。因此

struct only_double {
    only_double(intmax_t) = delete;
    only_double(double arg);
};
only_double zero(0); // Error - deleted constructor called

为什么不试试,看看会发生什么。可能是重复的和/或我试过了。这三种方法都是一样的。你为什么不试试,看看会发生什么。可能是重复的和/或我试过了。这三个函数都是一样的。是的,删除函数实际上并不存在,所以访问器并不重要。这就解释了。谢谢我想说它不存在是不对的。请注意-一个定义规则适用于已删除的定义。有关更多详细信息,请参阅。@skypjack:是的。这在问题的上下文中是正确的,但我添加了一个脚注(结果比真实答案长!)是的,删除函数实际上不存在,所以访问器并不重要。这就解释了。谢谢我想说它不存在是不对的。请注意-一个定义规则适用于已删除的定义。有关更多详细信息,请参阅。@skypjack:是的。这在问题的上下文中是正确的,但我添加了一个脚注(结果比真实答案长!)