- 1 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 09:13:53 ]
- C++の問題点について語るスレです
C++ってなんであんなに肥大化しちゃったの? pc11.2ch.net/test/read.cgi/tech/1219902495/
- 2 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 11:05:40 ]
- このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。
- 3 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 13:14:50 ]
- だからー いちいち禁止しなくても
本物の || && とおんなじ方法で動くようにすればいいだけだろ
- 4 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 18:04:14 ]
- &&のオーバーロードなんてgotoやlongjmpみたいなもの
使う方が悪い
- 5 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 19:05:52 ]
- もう飽きた、他のネタ頼むわ
- 6 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 19:26:39 ]
- そうだな
function-try-blockの話でもしようか
- 7 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 20:39:02 ]
- ライバルが現れた
gcjって使ってる人います? pc11.2ch.net/test/read.cgi/tech/1046627795/
- 8 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 20:44:16 ]
- shootout.alioth.debian.org/
見ると、ATSって言語が異常に速いんだが 誰か使ってる人いる?
- 9 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 11:16:32 ]
- || && 問題なんて「過去との互換性をとるために保守してあるだけで、現在は使わないでください」的なものだろ
Javaだって「将来無くすことになったので、このメソッドは使わないで新しいの使ってね」って言うじゃん。 で、実際に無くすか、互換性のために残しておくか。 どっちが正しいかは白黒なんてつかん
- 10 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 11:39:04 ]
- なんだこの頭の悪いレスは
アンチのなりすましですか?
- 11 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 19:26:07 ]
- ウドンズのCreateWindowみたいなものか
- 12 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 20:36:58 ]
- CreateWindowはObsoleteじゃないだろ
- 13 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 23:59:55 ]
- C++に限らずif (x) if (y)のシンタックスシュガーとして&&は時々便利に感じる。
- 14 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 04:15:14 ]
- アイちゃんちょっと頑張り過ぎじゃね?
- 15 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 04:58:04 ]
- >>13
時々じゃなくてそれに基づいてプログラムを書いてるわけだが お陰でオーバーロード時に問題が生じてしまったのは禿の責任ではない
- 16 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 20:00:28 ]
- && や || をオーバーロードなんてすんなってこった。
- 17 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 21:43:39 ]
- 正しい動作するようにかける方法を
関数以外で提供すれば言いだけ
- 18 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 22:52:55 ]
- 正しいも動作も何も、&&, ||が論理演算である必要すらないのだが。
+を掛け算、*を足し算にして、足し算優先な数式すらつくれるというのに。
- 19 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 23:19:21 ]
- それはAdd()という名の引き算関数作ることと何が違うの?
- 20 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:02:32 ]
- 指数演算ならMul()という名前の足し算関数はありうる
- 21 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:06:49 ]
- >>19
汗の世界では良くあること。
- 22 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:26:54 ]
- >>19
全然違うぜ。 Add(Mul(1, 2), 3) はあくまでmulを解釈した後addを解釈するし Mul(Add(1,2), 3) はAddを先に解釈する 1+2*3 は 1*2+3 としたところで、必ず*が先に解釈される。 プログラムの書き手が解釈順位を決めるのが関数 演算子はコンパイラがすでに解釈順位を決めている。
- 23 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:31:04 ]
- 演算子はコンパイラがすでに解釈順位を決めている。
にらそれと同じことをすればいい
- 24 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:31:53 ]
- >>23
まあ、俺もうまく説明できてないが、 問題点を理解できてないのに噛み付かなくてもいいよ。
- 25 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 02:18:29 ]
- >>24
で、そういうことをするプログラマーが問題ではないと
- 26 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 11:11:10 ]
- 自由と責任は表裏一体。
低レベルの開発ならC並の何でもできる自由度が必要だけど、アプリよりになればなるほど勝手な振る舞いはしてほしくない。 今はハードをベタベタに触る言語とGUIやwebをらくらく使う言語と使い分ける時代じゃねーのかね。 C++は全部やろうとして、肥大化してるし、トラップも増えている感じ。 何でもできるけど、責任はプログラマ側ねという言語は必要だけどすべての分野で使うべきかどうかは疑問だね。
- 27 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 12:30:57 ]
- 本当に自由な言語には使わない自由もあるだろ。
そもそもC++をすべての分野で使うべきなんて誰も言ってないのに勝手に勘違いして GCを全否定したり無駄な継承したりするのが義務だと思い込んでるだけ。
- 28 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 12:33:54 ]
- 分かってる人は分かった上でC++使ってればいいんだよ。
分からない人が「たくさん」いる現場で使うにはC++はしんどい言語だってこと。
- 29 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 12:33:56 ]
- 流れを読まずにかきこ
GCって何?
- 30 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 12:35:07 ]
- 分かってないのに分かった気になってる人がたくさんいる言語
- 31 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 12:36:31 ]
- Graphics Context
Grand Central Gabage Collection
- 32 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 13:40:52 ]
- nintendo
- 33 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 15:39:46 ]
- 前スレ984、少し改変
あなたは○×言語の問題点を指摘されました 1)「おまえは○×言語もわからない馬鹿だから問題じゃない!」とレッテルを貼る 2)「その問題は俺は(普通は)回避できる(使わない)から問題じゃない!」と論点を摩り替える 3)「△□言語にも同じ問題があるから問題じゃない!」と論点を摩り替える 4)「〜〜という理由でそれは問題とは言えないのではないか?」と論理的に問題無いことを証明する 5)「確かにそこには問題があるね」と素直に認める
- 34 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 16:04:48 ]
- 2と4の違いはなんだ
属人性の排除とかいうやつか
- 35 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 16:30:24 ]
- 2はオールマイティーだな
どんな言語・問題点だろうと普通は使わないからおkって答えればいい
- 36 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 16:36:29 ]
- 包丁やナイフにも人をさせる問題があるが世界中で愛されている
- 37 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:02:14 ]
- ナイフなんかは問題が明らかになれば規制される物だよな
- 38 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:02:36 ]
- 包丁やナイフは人をさせるということが予測がつくが、
C++の演算子オーバーロードや例外は想像を超えた害悪があるから問題なんでしょ。
- 39 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:03:43 ]
- つーか包丁は役に立つが
&&のオーバーロードは罠なだけで役に立たん
- 40 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:11:25 ]
- 追加
6)「問題はあるけど愛されてるから無問題」と論点を摩り替える もう何でもアリだなwww
- 41 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:16:17 ]
- 演算子のオーバーロードは無いと困る機能でもないのに
問題を孕んでるのが嫌らしいよな。結局、無い方がいい。
- 42 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:27:27 ]
- >>41
演算子のオーバーロードは無いと困るだろう
- 43 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:28:40 ]
- 演算子オーバーロード全部がまずいのではない
&& || , がまずいだけだ さしあたりはな
- 44 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:31:09 ]
- ()、->、newなんかは大活躍ですよ
- 45 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:31:25 ]
- >>40
論点うんぬんは関係ない ただ根拠がいい加減なだけ
- 46 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:36:35 ]
- operator++()の引数はいらない子
- 47 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:39:00 ]
- >>44
ユーザ定義の演算子を作らなくても実現出来ると思うんだけど
- 48 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:07:22 ]
- そりゃそうだ。どれも関数呼び出しに還元できる。
それ言ったらどの演算子も多重定義できる必要は無い。 複素数やベクトルでa + bと書きたいのと同じようにスマートポインタではp->mと書きたい。
- 49 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:41:28 ]
- 屋上屋ってやつか
- 50 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:51:31 ]
- operator->は生ポインタを隠すのに有効
と思ってたけどp.operator->()って普通に出来ちゃうのな あまり意味がないような気がしてきた
- 51 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:25:06 ]
- あまり意味がないことを悟った上で使えってことじゃね
- 52 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 20:33:58 ]
- 覚えたての厨房が粋がってトリッキーなオーバーロードをしないように気をつけないといけないのが面倒くさい。
- 53 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 20:43:27 ]
- >>50
そう、隠すためではなく糖衣構文を提供するためのもの。
- 54 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 05:32:02 ]
- お前らいい加減にしろよ
前スレは10年近く前のネタを1000もかけて焼き直しただけだろ これ以上一体何を続けるつもりだ? www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
- 55 名前:デフォルトの名無しさん [2008/10/14(火) 09:11:42 ]
- その偽ネタインタビューと現在のC++の問題点となんの関係がある?
- 56 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 09:21:25 ]
- >>55
ヒント:読んだばかり
- 57 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 10:41:05 ]
- >>55
え?ネタって書いてあるのが読めなかったの? え?書いてある内容がどんなもんかすらわからなかったの? え?もしかしてニホンゴワカラナイ?
- 58 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 11:14:57 ]
- >>57
日本語でおk
- 59 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 18:12:29 ]
- 前スレと>>54見てこれなら、真性馬鹿はゆとりとは一味違うな
- 60 名前:デフォルトの名無しさん [2008/10/15(水) 10:02:39 ]
- 横だが本気で意味わからん
真正馬鹿でもゆとりでもいいから是非日本語で詳しく解説してくれ ちなみに前スレって一言でまとめると 「斜め上発言でアンチからフルボッコされるドM信者スレ」 だよ?
- 61 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 18:03:39 ]
- 斜め上発言で信者からも「アンチからも」フルボッコされるドMアンチもいました
- 62 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 18:25:37 ]
- え?そんなの覚えないけど?
すごく興味あるから印象操作じゃないならポインタ示してね
- 63 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:58:32 ]
- >>60
すごく興味あるから印象操作じゃないならポインタ示してね
- 64 名前:デフォルトの名無しさん [2008/10/16(木) 10:17:02 ]
- 前スレ987
>まぁ信者は問題点に納得した時点で沈黙するからなぁ >結局新規の馬鹿信者が斜め上発言してアンチがフルボッコにするループはいくらでも続く 前スレ988 >&&批判に反発してた連中は、終わった話を何度も蒸し返して >無駄に傷口広げてる感じだったな >しかも禿の仕様ミスであること自体は認めているから >まともに・論理的には反論できずに >そんなのは些細なことで問題にするほうがおかしいとか >斜め上の話ばかりになる
- 65 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 10:32:36 ]
- ところで、&&や||をオーバーロードすることの何が問題なの?
- 66 名前:デフォルトの名無しさん [2008/10/16(木) 18:38:55 ]
- 結論から言うと、演算子オーバーロードはSTL向けの関数オブジェクト作るためだけに使え、
ということだな。
- 67 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 19:47:53 ]
- , || && は boost::spirit で活躍しているよ。
- 68 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 21:27:42 ]
- >>66
なぜそれが結論なのかが知りたいのですけど? 一体何が問題なのですか?
- 69 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:10:53 ]
- std::cout << "banana" << count << std::endl;
(ノ ゚Д゚)ノ ==== ┻━━┻
- 70 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:04:10 ]
- コンテナ継承させてよぅ
- 71 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:24:11 ]
- ただの質問スレだったら、protected継承でいいじゃないって答えるところだな。
- 72 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:49:18 ]
- >>65
組み込み型に対する&&や||は短絡といって、 左から順に評価していって、 結果が分かったらそれ以降の評価を行わない仕組みになってる。 たとえば、 bool f1(); bool f2(); if ( f1() && f2() ) という式があったとすると、f1が偽の場合、f2は評価されないことが保証される。 しかし、&&や||のオーバーロードの場合は関数呼び出しと解釈されるため、短絡がない。 それどころか、関数呼び出し順序は標準に規定されていないため、 どちらが先に評価されるかすら分からない。 my_bool b1(); my_bool b2(); if ( b1() && b2() ) この場合、b1とb2のどちらが先に評価されるか分からない(処理系依存)。 分かりにくいバグの元になる、コードの可搬性を損なう、などの理由から &&や||のオーバーロードは推奨されない。
- 73 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 00:22:41 ]
- >>72
つまり、&&オーバーロードは、+等のオーバーロードとは違う解釈で実行されるってことなの? それなら、大きな問題だなぁ...
- 74 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 00:26:31 ]
- >>組み込み型に対する&&や||は短絡といって、
それと同じ構造にすればいいだろ
- 75 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 00:29:42 ]
- >>74
C#とかそれを目指している。 C++でもBoost.Lambdaは頑張った。 あと今から同じ構造になる仕組みをC++に持ち込んだとしても、 「互換性のため」現状の&&と||もそのまま残ること間違いない。
- 76 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:43:05 ]
- 比較的どうでもいい豆知識だな
- 77 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:51:46 ]
- 遅延評価の考え方がどうでもいい豆知識っすか
Cにどっぷりはまるとそうなっちゃうのね
- 78 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 02:33:00 ]
- 短絡評価 short-circuit evaluation と遅延評価 lazy evaluation はまったくの別物だぞ
遅延評価は、必要になるまで変数の値の計算を先延ばしにするHaskellのアレだ
- 79 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 02:37:48 ]
- 同じ様なもんだろ
右オペランドを遅延評価することを短絡評価という
- 80 名前:デフォルトの名無しさん [2008/10/17(金) 02:44:31 ]
- じゃあ遅漏評価は?
- 81 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 03:07:21 ]
- >79
遅延評価はもっと広い意味の言葉だから混同するとややこしい。
- 82 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 08:55:24 ]
- >>64
何の指摘にもなってないよ
- 83 名前:デフォルトの名無しさん [2008/10/17(金) 09:10:07 ]
- オーバーロード関数のDLLが・・・
- 84 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 09:13:17 ]
- >>83
日本語でok
- 85 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 10:40:56 ]
- オーバーロードしたら&&が論理和どころか論理演算ですらある必要がないので、
通常と同じ動作にしたらいいじゃんという主張は無意味だろ。
- 86 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 11:07:09 ]
- 演算子の元の意味と大きく異なるオーバーロードは駄目だろ
おまえは+が加算である必要が無いからって乗算にするのか?
- 87 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 12:04:19 ]
- > 演算子の元の意味と大きく異なるオーバーロードは駄目だろ
そこで << ですよ
- 88 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 12:10:38 ]
- >>72
良く分からんが if ( b1 && b2 ) は if ( b1.operator&&(b2) ) と等価じゃないの?
- 89 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 13:09:18 ]
- 常識という眼鏡で僕達の世界はのぞけやしないのさ
夢を忘れた古いプログラマーたちよ アンドじゃないアンドじゃない 素敵な世界
- 90 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:03:38 ]
- >>88
operator&&() が my_bool のメンバならね。 でも bool operator&&(const my_bool& a, const my_bool& b) かも知れない。 更に、b1 が左辺値ではなく my_bool を戻す式だったとき、 やっぱり b2 とどっちが先に評価されるかは判らない。
- 91 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 16:06:02 ]
- >>90
引数の評価順を重要視する意味がよくわからん 引数の時点で、真偽がわかったとしても関数から抜け出す手段は無いとおもうが? b1 && b2 && b3 の式の場合 operator&&(operator&&(b1, b2), b3) となって、operator&&(b1, b2)が偽の場合でも、一番外側のoperator&&()が実行されるから嫌だって事なら、ちょっとだけ理解できるかもしれないが だからと言って、C++の欠陥だと大声で言うようなものでも無いと思うのですが
- 92 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 16:52:03 ]
- >>91
短絡評価のメリットが解らない、ってこと?
- 93 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 17:17:31 ]
- >>92
短絡評価のメリットを受けられるほど長い論理式を使うつもりなのですか? それとも、短絡評価のメリットを受けられるほどのif文の山を築く気ですか?
- 94 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 17:41:19 ]
- 話がまた斜め上の方向に捩れてるな
>>91 if 式 文 で式の内容如何によらず文が評価されていいと思ってるのか? 遅延評価無しではif文を関数化することは出来ない だから禿も?:はoperator化していない にもかかわらず、同様の機能を持っている&&や||をoperator化しているのが マヌケだという話だろ >>93 言語仕様の問題をプログラミングスタイルの方向に摩り替えたい人発見
- 95 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:00:57 ]
- バグの原因は小さいものだから
大きな問題ではないと考えるのも無理はない
- 96 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:05:33 ]
- INT i=1,j=1; //なんかint的なクラスだと思いね
i++ || j++; cout << i << "," << j; ||がオーバーロードされていなければ「2,1」が表示される されていれば「2,2」が表示される open(file) && abort(); &&がオーバーロードされていなければ、ファイルオープンに成功すれば処理が続行される されていればファイルオープンに成功したのに異常終了する
- 97 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:32:16 ]
- >>94
論理式は論理式だろ? if文や三項演算子とは関係ないんじゃない? >>96 むしろ、その使い方が、言語仕様の悪用だと思います
- 98 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:46:18 ]
- >>97
いや、ショートサーキットの&&や||はifの変種みたいなもんだぞ C/C++に引きこもっているうちは分からないかもしれないが、 他の言語もやってみれば分かるよ
- 99 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:52:24 ]
- つーか短絡評価しないなら&や|だけでいい
何のためにわざわざ&&や||が用意されてると思ってるんだ
- 100 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:54:39 ]
- >>99
それもちょっと違うけどな 1 && 2は真だけど 1 & 2は0だし
|

|