いやすまんここに書いてあったわ
ttp://d.hatena.ne.jp/cubicdaiya/20080606/1212695409

前置インクリメントの場合、インクリメント後のオブジェクト*thisのコピーを返しても良いが、*thisの参照を返すこともできるし普通そうする
例: std::string& Counter::operator() { this->str += "1"; return *this; }

後置インクリメントの場合、*thisはインクリメントされるのに、返さねばならないのはインクリメント前ということで、別オブジェクトになるのでコピーを返す他無い
例 std::auto_ptr<std::string> Counter::operator() { std::auto_ptr<string> p(new string(this->str)); this->str += "1"; return p; }

当然コピーを返す方が実行効率が悪い