質問編集履歴

3

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

2017/03/24 03:25

投稿

grovion
grovion

スコア145

test CHANGED
File without changes
test CHANGED
@@ -263,3 +263,15 @@
263
263
  回答しようとしたが、やめてしまった方(結構ありますよね笑)、
264
264
 
265
265
  皆様、ありがとうございます。
266
+
267
+
268
+
269
+ # 追記 - ベストアンサーについて
270
+
271
+
272
+
273
+ 2017/03/24 12時24分
274
+
275
+
276
+
277
+ ベストアンサーについて:予想を超え、様々な人でこの回答作りあげている質問になりました。そのため、とてもベストアンサーが選びづらかったです。ですが、teratailから催促メールも来ますし、投票の一番多い、faithandbraveさんにベストアンサーを決定しました。活発な議論がとても楽しかったです。皆様ありがとうございました!

2

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

2017/03/24 03:25

投稿

grovion
grovion

スコア145

test CHANGED
File without changes
test CHANGED
@@ -33,3 +33,233 @@
33
33
 
34
34
 
35
35
  問題になるケースをC++のコードで、書いていただけるとありがたいです。
36
+
37
+
38
+
39
+
40
+
41
+ # (追記)ベストアンサーについて
42
+
43
+ (追記)2017/03/21 11:08
44
+
45
+
46
+
47
+ 書き込んでくれた皆様、
48
+
49
+ 書き込もうとしてやっぱりやめってしまった方、
50
+
51
+ この質問について真剣に考えてくださった方、
52
+
53
+ ありがとうございます
54
+
55
+
56
+
57
+ ベストアンサーをどうしたらいいか困っています
58
+
59
+ 誰か一人がというより、様々な方々の議論で、答えが作られていると思います
60
+
61
+ 。なにか方法があればお願いしたいです。
62
+
63
+
64
+
65
+ # (追記)結論:悪なのか?
66
+
67
+
68
+
69
+ あくまでも、個人的な結論ですが、そこまで悪ということはなさそうだと思いました。
70
+
71
+ 質問をする前は、もっと明らかな問題点が回答していただけるのかと思いましたが、そこまで決定的な悪があるようには思いませんでした。
72
+
73
+
74
+
75
+
76
+
77
+ # (追記)独断と偏見でご回答まとめ
78
+
79
+ (追記) 2017/03/21 11:59
80
+
81
+
82
+
83
+ ## まとめる理由
84
+
85
+ 回答とたくさんのコメントがあるので、
86
+
87
+ このページを初見した方が話を把握しづらいと思いますので、
88
+
89
+ 個人的にまとめます。
90
+
91
+
92
+
93
+ ### グローバル空間の汚染は悪か?
94
+
95
+
96
+
97
+ > グローバル空間を汚すことは行儀が悪いコードと言われます
98
+
99
+
100
+
101
+ これに対して、yumetodoさんが必ずしもそうではないと教えていただきました
102
+
103
+
104
+
105
+ > じゃあフリー関数が悪くてメソッドが正義かというと、実は真逆
106
+
107
+
108
+
109
+ とも教えていただき、説得力のある記事など詳しいことはyumetodoさんのご回答にかかれています。
110
+
111
+
112
+
113
+ 比較演算子についてもありましたが、演算子のオーバーロード自体の問題ではないのかなぁと思い、悪だという決定打にはなりませんでした。
114
+
115
+
116
+
117
+ ### 問題のあるコードのご提示と改善
118
+
119
+
120
+
121
+ raccyさんはC++演算子のオーバーロードでいかが問題となるものを
122
+
123
+ 具体的なコードでご提示していただきました。
124
+
125
+ * グローバルの汚染がある
126
+
127
+ * 足し算の定義が一箇所にならない
128
+
129
+
130
+
131
+ 様々な議論の末、Chironianさんが上記の問題を解決するコードを提示していただきました。
132
+
133
+
134
+
135
+ 実際にこのページ内に動作するコードが掲載されています。
136
+
137
+ 詳しくは、raccyさんのご回答の先頭のコード(内容が変更されるかもしれません)
138
+
139
+ または、こちらのChironianさんが作ってくださったリンクをご確認ください。
140
+
141
+ [http://melpon.org/wandbox/permlink/PvZWTA2JXg1emLCQ](http://melpon.org/wandbox/permlink/PvZWTA2JXg1emLCQ)
142
+
143
+ (厳密にはChironianさんのリンクのコードとraccyさんとの回答内にあるコードは少し異なります)
144
+
145
+
146
+
147
+ ### C++標準が良くないものを全面に出している?
148
+
149
+
150
+
151
+ (見出しの表現が適切じゃないかもです)
152
+
153
+
154
+
155
+ Zuishinさんのご回答とコメントでなるほどと思いました。
156
+
157
+
158
+
159
+
160
+
161
+ `std::cout << ...`について、
162
+
163
+ > この演算子はビットシフトに使うものであって、入出力に使うものではないはずです。
164
+
165
+
166
+
167
+ これを説得付ける資料として、Microsoftが以下のように言っているようです。
168
+
169
+ (詳しくはZuishinさんのご回答内にリンクなどがあります)
170
+
171
+
172
+
173
+ > shift を使用してストリームに書き込みを行うことは適切ではありません。
174
+
175
+
176
+
177
+
178
+
179
+ C++の演算子のオーバーロードの問題点は、
180
+
181
+
182
+
183
+ Zuishinさんのコメントを引用すると、
184
+
185
+
186
+
187
+ > 繰り返しになりますが、C++ の場合は標準ライブラリが見本として奇怪なオーバーロードを掲げていて、それを手本にした奇怪なオーバーロードが責められることなく大手を振っていました。
188
+
189
+
190
+
191
+ ということです。これはすごく納得しました。
192
+
193
+
194
+
195
+ 「できるのとやるは違う」ということを教えていただきました。
196
+
197
+
198
+
199
+ 確かにC++標準が作り出すコーディングスタイルが問題というのは、とても問題だと感じました。なぜなら、C++プログラマはその演算子のオーバーロードを使う機会が増えますし、そのスタイルに影響を受けるからです(ここは自分の意見です)。
200
+
201
+
202
+
203
+
204
+
205
+ ### Googleのコーディングスタイル
206
+
207
+
208
+
209
+ catsforepawさんが、ご提供してくださいました
210
+
211
+ この記事は、この質問の内にあるブログ記事の年に合わせて、古いものを提供してくださってます。
212
+
213
+ ここでは、
214
+
215
+ > 特殊な状況を除き、演算子をオーバーロードしてはいけません。
216
+
217
+
218
+
219
+ とだけ書いてあり、演算子のオーバーロードに対して良くないと感じを受けます。
220
+
221
+
222
+
223
+ * [http://www.textdrop.net/google-styleguide-ja/cppguide.xml#演算子のオーバーロード](http://www.textdrop.net/google-styleguide-ja/cppguide.xml#演算子のオーバーロード)
224
+
225
+
226
+
227
+ 最新のものは、Chironianさんがご提供してくださり、
228
+
229
+
230
+
231
+ > 念のため最新版を見ると、160度程見解が変わっているようです。
232
+
233
+
234
+
235
+ と言われているように、だいぶ変わっています。
236
+
237
+
238
+
239
+ yumetodoさんの言葉を借りれば、
240
+
241
+ > 別に嫌わずにかわいがってあげようよ、と思う、今日このごろです。
242
+
243
+
244
+
245
+ ということでしょうか(英語ですし、まだちゃんと読んでません...)。
246
+
247
+
248
+
249
+ [https://google.github.io/styleguide/cppguide.html#Operator_Overloading](https://google.github.io/styleguide/cppguide.html#Operator_Overloading)
250
+
251
+
252
+
253
+ ---
254
+
255
+
256
+
257
+ この質問に、
258
+
259
+ 考えてくださった方、
260
+
261
+ ご回答してくださった方、
262
+
263
+ 回答しようとしたが、やめてしまった方(結構ありますよね笑)、
264
+
265
+ 皆様、ありがとうございます。

1

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

2017/03/21 03:01

投稿

grovion
grovion

スコア145

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- http://d.hatena.ne.jp/xef/20130309/p1
21
+ [http://d.hatena.ne.jp/xef/20130309/p1](http://d.hatena.ne.jp/xef/20130309/p1)
22
22
 
23
23
 
24
24