在“C++程序设计语言”预定义的含义,在265页中,作者提出了以下声明:问题对运营商
由于历史的偶然的,运营商=(转让),&(地址 - ),和(排序; 第6.2.2节)在应用于类对象时具有预定义的含义。这些预定义的意义可以 通过使他们的私人而不能接触到一般用户:
那么下面的例子说明:
class X {
private:
void operator=(const X&);
void operator&();
void operator,(const X&);
// ...
};
void f(X a, X b)
{
a = b; // error: operator= private
&a; // error: operator& private
a,b; // error: operator, private
}
我不是很了解做这些“错误”意见指至?这是否意味着我不应该这样定义一个函数f
,或者所有的=
,&
,并且,
运营商应按照默认方式来使用,没有必要重新定义它们呢?
我发现这个答案比最上面的一个更清晰:*预定义的含义*的意义在于它们存在并且将在默认情况下工作,并且*禁止*在C++ 03中的行为的唯一方法是通过声明它们为'private'(C++ 0x添加'delete'关键字) –