在「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'關鍵字) –