質問するログイン新規登録

質問編集履歴

3

ベストアンサーについてを追記

2017/03/24 03:25

投稿

grovion
grovion

スコア145

title CHANGED
File without changes
body CHANGED
@@ -130,4 +130,10 @@
130
130
  考えてくださった方、
131
131
  ご回答してくださった方、
132
132
  回答しようとしたが、やめてしまった方(結構ありますよね笑)、
133
- 皆様、ありがとうございます。
133
+ 皆様、ありがとうございます。
134
+
135
+ # 追記 - ベストアンサーについて
136
+
137
+ 2017/03/24 12時24分
138
+
139
+ ベストアンサーについて:予想を超え、様々な人でこの回答作りあげている質問になりました。そのため、とてもベストアンサーが選びづらかったです。ですが、teratailから催促メールも来ますし、投票の一番多い、faithandbraveさんにベストアンサーを決定しました。活発な議論がとても楽しかったです。皆様ありがとうございました!

2

ベストアンサーについて、自分の結論、まとめの追記

2017/03/24 03:25

投稿

grovion
grovion

スコア145

title CHANGED
File without changes
body CHANGED
@@ -15,4 +15,119 @@
15
15
  笑い混じりに「殺せ」と使っている様子をみると、C++演算子の演算子のオーバーロードに多少問題があるのだろうなと思いました。
16
16
 
17
17
 
18
- 問題になるケースをC++のコードで、書いていただけるとありがたいです。
18
+ 問題になるケースをC++のコードで、書いていただけるとありがたいです。
19
+
20
+
21
+ # (追記)ベストアンサーについて
22
+ (追記)2017/03/21 11:08
23
+
24
+ 書き込んでくれた皆様、
25
+ 書き込もうとしてやっぱりやめってしまった方、
26
+ この質問について真剣に考えてくださった方、
27
+ ありがとうございます
28
+
29
+ ベストアンサーをどうしたらいいか困っています
30
+ 誰か一人がというより、様々な方々の議論で、答えが作られていると思います
31
+ 。なにか方法があればお願いしたいです。
32
+
33
+ # (追記)結論:悪なのか?
34
+
35
+ あくまでも、個人的な結論ですが、そこまで悪ということはなさそうだと思いました。
36
+ 質問をする前は、もっと明らかな問題点が回答していただけるのかと思いましたが、そこまで決定的な悪があるようには思いませんでした。
37
+
38
+
39
+ # (追記)独断と偏見でご回答まとめ
40
+ (追記) 2017/03/21 11:59
41
+
42
+ ## まとめる理由
43
+ 回答とたくさんのコメントがあるので、
44
+ このページを初見した方が話を把握しづらいと思いますので、
45
+ 個人的にまとめます。
46
+
47
+ ### グローバル空間の汚染は悪か?
48
+
49
+ > グローバル空間を汚すことは行儀が悪いコードと言われます
50
+
51
+ これに対して、yumetodoさんが必ずしもそうではないと教えていただきました
52
+
53
+ > じゃあフリー関数が悪くてメソッドが正義かというと、実は真逆
54
+
55
+ とも教えていただき、説得力のある記事など詳しいことはyumetodoさんのご回答にかかれています。
56
+
57
+ 比較演算子についてもありましたが、演算子のオーバーロード自体の問題ではないのかなぁと思い、悪だという決定打にはなりませんでした。
58
+
59
+ ### 問題のあるコードのご提示と改善
60
+
61
+ raccyさんはC++演算子のオーバーロードでいかが問題となるものを
62
+ 具体的なコードでご提示していただきました。
63
+ * グローバルの汚染がある
64
+ * 足し算の定義が一箇所にならない
65
+
66
+ 様々な議論の末、Chironianさんが上記の問題を解決するコードを提示していただきました。
67
+
68
+ 実際にこのページ内に動作するコードが掲載されています。
69
+ 詳しくは、raccyさんのご回答の先頭のコード(内容が変更されるかもしれません)
70
+ または、こちらのChironianさんが作ってくださったリンクをご確認ください。
71
+ [http://melpon.org/wandbox/permlink/PvZWTA2JXg1emLCQ](http://melpon.org/wandbox/permlink/PvZWTA2JXg1emLCQ)
72
+ (厳密にはChironianさんのリンクのコードとraccyさんとの回答内にあるコードは少し異なります)
73
+
74
+ ### C++標準が良くないものを全面に出している?
75
+
76
+ (見出しの表現が適切じゃないかもです)
77
+
78
+ Zuishinさんのご回答とコメントでなるほどと思いました。
79
+
80
+
81
+ `std::cout << ...`について、
82
+ > この演算子はビットシフトに使うものであって、入出力に使うものではないはずです。
83
+
84
+ これを説得付ける資料として、Microsoftが以下のように言っているようです。
85
+ (詳しくはZuishinさんのご回答内にリンクなどがあります)
86
+
87
+ > shift を使用してストリームに書き込みを行うことは適切ではありません。
88
+
89
+
90
+ C++の演算子のオーバーロードの問題点は、
91
+
92
+ Zuishinさんのコメントを引用すると、
93
+
94
+ > 繰り返しになりますが、C++ の場合は標準ライブラリが見本として奇怪なオーバーロードを掲げていて、それを手本にした奇怪なオーバーロードが責められることなく大手を振っていました。
95
+
96
+ ということです。これはすごく納得しました。
97
+
98
+ 「できるのとやるは違う」ということを教えていただきました。
99
+
100
+ 確かにC++標準が作り出すコーディングスタイルが問題というのは、とても問題だと感じました。なぜなら、C++プログラマはその演算子のオーバーロードを使う機会が増えますし、そのスタイルに影響を受けるからです(ここは自分の意見です)。
101
+
102
+
103
+ ### Googleのコーディングスタイル
104
+
105
+ catsforepawさんが、ご提供してくださいました
106
+ この記事は、この質問の内にあるブログ記事の年に合わせて、古いものを提供してくださってます。
107
+ ここでは、
108
+ > 特殊な状況を除き、演算子をオーバーロードしてはいけません。
109
+
110
+ とだけ書いてあり、演算子のオーバーロードに対して良くないと感じを受けます。
111
+
112
+ * [http://www.textdrop.net/google-styleguide-ja/cppguide.xml#演算子のオーバーロード](http://www.textdrop.net/google-styleguide-ja/cppguide.xml#演算子のオーバーロード)
113
+
114
+ 最新のものは、Chironianさんがご提供してくださり、
115
+
116
+ > 念のため最新版を見ると、160度程見解が変わっているようです。
117
+
118
+ と言われているように、だいぶ変わっています。
119
+
120
+ yumetodoさんの言葉を借りれば、
121
+ > 別に嫌わずにかわいがってあげようよ、と思う、今日このごろです。
122
+
123
+ ということでしょうか(英語ですし、まだちゃんと読んでません...)。
124
+
125
+ [https://google.github.io/styleguide/cppguide.html#Operator_Overloading](https://google.github.io/styleguide/cppguide.html#Operator_Overloading)
126
+
127
+ ---
128
+
129
+ この質問に、
130
+ 考えてくださった方、
131
+ ご回答してくださった方、
132
+ 回答しようとしたが、やめてしまった方(結構ありますよね笑)、
133
+ 皆様、ありがとうございます。

1

リンクをクリックできるように変更

2017/03/21 03:01

投稿

grovion
grovion

スコア145

title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,7 @@
8
8
  以下のサイトで、
9
9
  > これを見て「あっ、C++の演算子オーバーロードだ、殺せ!」となったキミ、ちょっと待ってほしい。実はね...
10
10
 
11
- http://d.hatena.ne.jp/xef/20130309/p1
11
+ [http://d.hatena.ne.jp/xef/20130309/p1](http://d.hatena.ne.jp/xef/20130309/p1)
12
12
 
13
13
  という記述を前に見たことがあったからです。
14
14