読者です 読者をやめる 読者になる 読者になる

re:だうと

ttp://blogs.wankuma.com/shuujin/archive/2007/07/16/85348.aspx

C++ ってなんでこんなに強力なんだろうね。テンプレートの存在と、あらゆる演算子
オーバーロードできるせいかしら。いや、C++ を愛する人達の情熱のせいだ!

オーバーロードすることができない演算子は複数あります >C++

404 Not Found

実用上オーバーロードが推奨されない演算子も複数ありますね。
MoreEffectiveC++の指摘を借りれば、
operator &&
operator ||
operator ,


if (expression1 && expression2) ...

if (expression1.operator&&(expression2)) ... // &&がメンバ関数
if (operator&&(expression1, expression2)) ... // &&が大域関数


と評価され、不断の&&や||とは振る舞いが変わる。
(詳しく言えば両項expressionの評価のされかたが変わる)


,演算子も普通の人にとってはオーバーロードされると意味が分からない。


ついでにオーバーロード「できない」演算子一覧。via MoreEffectiveC++

  • .
  • .*
  • ::
  • ?:
  • new
  • delete
  • sizeof
  • typeid
  • static_cast
  • dynamic_cast
  • const_cast
  • reinterpret_cast

(new 演算子は振る舞いをかえることができない。
 placement new などが作用できるのはoperator newに対してである。
 なぜならnew 演算子はoperator newを呼び出す、という振る舞いをするからだ。
 これはnew 演算子の振る舞いを変えることではない。
 new 演算子が呼び出す関数operator newの振る舞いを変えることになる。
 ……ややこしいな)

でオーバーロード可能な奴ら。

operator new
operator delete
operator new
operator delete

+ - * / % ^ & | ~
! = < > += -= *= /= %=
^= &= |= << >> >>= <<= == !=
<= >= && || ++ -- , ->* ->
() []

これを見ると「オーバーロードできること」=「強力」ではないと理解できる筈。
複雑さの源泉(の一端を担う要素)でもあり、Java演算子オーバーロードをいれなかった理由なのかも。