C++の問題点について語るスレです
C++ってなんであんなに肥大化しちゃったの?
http://pc11.2ch.net/test/read.cgi/tech/1219902495/
探検
【信者】C++の問題点【アンチ】
■ このスレッドは過去ログ倉庫に格納されています
2008/10/10(金) 09:13:53
2008/10/10(金) 11:05:40
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
2008/10/10(金) 13:14:50
だからー いちいち禁止しなくても
本物の || && とおんなじ方法で動くようにすればいいだけだろ
本物の || && とおんなじ方法で動くようにすればいいだけだろ
2008/10/10(金) 18:04:14
&&のオーバーロードなんてgotoやlongjmpみたいなもの
使う方が悪い
使う方が悪い
2008/10/10(金) 19:05:52
もう飽きた、他のネタ頼むわ
2008/10/10(金) 19:26:39
そうだな
function-try-blockの話でもしようか
function-try-blockの話でもしようか
2008/10/10(金) 20:39:02
2008/10/10(金) 20:44:16
2008/10/11(土) 11:16:32
|| && 問題なんて「過去との互換性をとるために保守してあるだけで、現在は使わないでください」的なものだろ
Javaだって「将来無くすことになったので、このメソッドは使わないで新しいの使ってね」って言うじゃん。
で、実際に無くすか、互換性のために残しておくか。
どっちが正しいかは白黒なんてつかん
Javaだって「将来無くすことになったので、このメソッドは使わないで新しいの使ってね」って言うじゃん。
で、実際に無くすか、互換性のために残しておくか。
どっちが正しいかは白黒なんてつかん
2008/10/11(土) 11:39:04
なんだこの頭の悪いレスは
アンチのなりすましですか?
アンチのなりすましですか?
2008/10/11(土) 19:26:07
ウドンズのCreateWindowみたいなものか
2008/10/11(土) 20:36:58
CreateWindowはObsoleteじゃないだろ
2008/10/11(土) 23:59:55
C++に限らずif (x) if (y)のシンタックスシュガーとして&&は時々便利に感じる。
2008/10/12(日) 04:15:14
アイちゃんちょっと頑張り過ぎじゃね?
2008/10/12(日) 04:58:04
2008/10/12(日) 20:00:28
&& や || をオーバーロードなんてすんなってこった。
2008/10/12(日) 21:43:39
正しい動作するようにかける方法を
関数以外で提供すれば言いだけ
関数以外で提供すれば言いだけ
2008/10/12(日) 22:52:55
正しいも動作も何も、&&, ||が論理演算である必要すらないのだが。
+を掛け算、*を足し算にして、足し算優先な数式すらつくれるというのに。
+を掛け算、*を足し算にして、足し算優先な数式すらつくれるというのに。
2008/10/12(日) 23:19:21
それはAdd()という名の引き算関数作ることと何が違うの?
2008/10/13(月) 00:02:32
指数演算ならMul()という名前の足し算関数はありうる
2008/10/13(月) 00:06:49
>>19
汗の世界では良くあること。
汗の世界では良くあること。
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
としたところで、必ず*が先に解釈される。
プログラムの書き手が解釈順位を決めるのが関数
演算子はコンパイラがすでに解釈順位を決めている。
全然違うぜ。
Add(Mul(1, 2), 3)
はあくまでmulを解釈した後addを解釈するし
Mul(Add(1,2), 3)
はAddを先に解釈する
1+2*3
は
1*2+3
としたところで、必ず*が先に解釈される。
プログラムの書き手が解釈順位を決めるのが関数
演算子はコンパイラがすでに解釈順位を決めている。
2008/10/13(月) 00:31:04
演算子はコンパイラがすでに解釈順位を決めている。
にらそれと同じことをすればいい
にらそれと同じことをすればいい
2008/10/13(月) 00:31:53
2008/10/13(月) 02:18:29
>>24
で、そういうことをするプログラマーが問題ではないと
で、そういうことをするプログラマーが問題ではないと
2008/10/13(月) 11:11:10
自由と責任は表裏一体。
低レベルの開発ならC並の何でもできる自由度が必要だけど、アプリよりになればなるほど勝手な振る舞いはしてほしくない。
今はハードをベタベタに触る言語とGUIやwebをらくらく使う言語と使い分ける時代じゃねーのかね。
C++は全部やろうとして、肥大化してるし、トラップも増えている感じ。
何でもできるけど、責任はプログラマ側ねという言語は必要だけどすべての分野で使うべきかどうかは疑問だね。
低レベルの開発ならC並の何でもできる自由度が必要だけど、アプリよりになればなるほど勝手な振る舞いはしてほしくない。
今はハードをベタベタに触る言語とGUIやwebをらくらく使う言語と使い分ける時代じゃねーのかね。
C++は全部やろうとして、肥大化してるし、トラップも増えている感じ。
何でもできるけど、責任はプログラマ側ねという言語は必要だけどすべての分野で使うべきかどうかは疑問だね。
2008/10/13(月) 12:30:57
本当に自由な言語には使わない自由もあるだろ。
そもそもC++をすべての分野で使うべきなんて誰も言ってないのに勝手に勘違いして
GCを全否定したり無駄な継承したりするのが義務だと思い込んでるだけ。
そもそもC++をすべての分野で使うべきなんて誰も言ってないのに勝手に勘違いして
GCを全否定したり無駄な継承したりするのが義務だと思い込んでるだけ。
2008/10/13(月) 12:33:54
分かってる人は分かった上でC++使ってればいいんだよ。
分からない人が「たくさん」いる現場で使うにはC++はしんどい言語だってこと。
分からない人が「たくさん」いる現場で使うにはC++はしんどい言語だってこと。
2008/10/13(月) 12:33:56
流れを読まずにかきこ
GCって何?
GCって何?
2008/10/13(月) 12:35:07
分かってないのに分かった気になってる人がたくさんいる言語
2008/10/13(月) 12:36:31
Graphics Context
Grand Central
Gabage Collection
Grand Central
Gabage Collection
2008/10/13(月) 13:40:52
nintendo
2008/10/13(月) 15:39:46
前スレ984、少し改変
あなたは○×言語の問題点を指摘されました
1)「おまえは○×言語もわからない馬鹿だから問題じゃない!」とレッテルを貼る
2)「その問題は俺は(普通は)回避できる(使わない)から問題じゃない!」と論点を摩り替える
3)「△□言語にも同じ問題があるから問題じゃない!」と論点を摩り替える
4)「〜〜という理由でそれは問題とは言えないのではないか?」と論理的に問題無いことを証明する
5)「確かにそこには問題があるね」と素直に認める
あなたは○×言語の問題点を指摘されました
1)「おまえは○×言語もわからない馬鹿だから問題じゃない!」とレッテルを貼る
2)「その問題は俺は(普通は)回避できる(使わない)から問題じゃない!」と論点を摩り替える
3)「△□言語にも同じ問題があるから問題じゃない!」と論点を摩り替える
4)「〜〜という理由でそれは問題とは言えないのではないか?」と論理的に問題無いことを証明する
5)「確かにそこには問題があるね」と素直に認める
2008/10/13(月) 16:04:48
2と4の違いはなんだ
属人性の排除とかいうやつか
属人性の排除とかいうやつか
2008/10/13(月) 16:30:24
2はオールマイティーだな
どんな言語・問題点だろうと普通は使わないからおkって答えればいい
どんな言語・問題点だろうと普通は使わないからおkって答えればいい
2008/10/13(月) 16:36:29
包丁やナイフにも人をさせる問題があるが世界中で愛されている
2008/10/13(月) 17:02:14
ナイフなんかは問題が明らかになれば規制される物だよな
2008/10/13(月) 17:02:36
包丁やナイフは人をさせるということが予測がつくが、
C++の演算子オーバーロードや例外は想像を超えた害悪があるから問題なんでしょ。
C++の演算子オーバーロードや例外は想像を超えた害悪があるから問題なんでしょ。
2008/10/13(月) 17:03:43
つーか包丁は役に立つが
&&のオーバーロードは罠なだけで役に立たん
&&のオーバーロードは罠なだけで役に立たん
2008/10/13(月) 17:11:25
追加
6)「問題はあるけど愛されてるから無問題」と論点を摩り替える
もう何でもアリだなwww
6)「問題はあるけど愛されてるから無問題」と論点を摩り替える
もう何でもアリだなwww
2008/10/13(月) 17:16:17
演算子のオーバーロードは無いと困る機能でもないのに
問題を孕んでるのが嫌らしいよな。結局、無い方がいい。
問題を孕んでるのが嫌らしいよな。結局、無い方がいい。
2008/10/13(月) 17:27:27
>>41
演算子のオーバーロードは無いと困るだろう
演算子のオーバーロードは無いと困るだろう
2008/10/13(月) 17:28:40
演算子オーバーロード全部がまずいのではない
&& || ,
がまずいだけだ
さしあたりはな
&& || ,
がまずいだけだ
さしあたりはな
2008/10/13(月) 17:31:09
()、->、newなんかは大活躍ですよ
2008/10/13(月) 17:31:25
2008/10/13(月) 17:36:35
operator++()の引数はいらない子
2008/10/13(月) 17:39:00
>>44
ユーザ定義の演算子を作らなくても実現出来ると思うんだけど
ユーザ定義の演算子を作らなくても実現出来ると思うんだけど
2008/10/13(月) 18:07:22
そりゃそうだ。どれも関数呼び出しに還元できる。
それ言ったらどの演算子も多重定義できる必要は無い。
複素数やベクトルでa + bと書きたいのと同じようにスマートポインタではp->mと書きたい。
それ言ったらどの演算子も多重定義できる必要は無い。
複素数やベクトルでa + bと書きたいのと同じようにスマートポインタではp->mと書きたい。
2008/10/13(月) 18:41:28
屋上屋ってやつか
2008/10/13(月) 18:51:31
operator->は生ポインタを隠すのに有効
と思ってたけどp.operator->()って普通に出来ちゃうのな
あまり意味がないような気がしてきた
と思ってたけどp.operator->()って普通に出来ちゃうのな
あまり意味がないような気がしてきた
2008/10/13(月) 19:25:06
あまり意味がないことを悟った上で使えってことじゃね
2008/10/13(月) 20:33:58
覚えたての厨房が粋がってトリッキーなオーバーロードをしないように気をつけないといけないのが面倒くさい。
2008/10/13(月) 20:43:27
>>50
そう、隠すためではなく糖衣構文を提供するためのもの。
そう、隠すためではなく糖衣構文を提供するためのもの。
2008/10/14(火) 05:32:02
お前らいい加減にしろよ
前スレは10年近く前のネタを1000もかけて焼き直しただけだろ
これ以上一体何を続けるつもりだ?
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
前スレは10年近く前のネタを1000もかけて焼き直しただけだろ
これ以上一体何を続けるつもりだ?
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
55デフォルトの名無しさん
2008/10/14(火) 09:11:42 その偽ネタインタビューと現在のC++の問題点となんの関係がある?
2008/10/14(火) 09:21:25
>>55
ヒント:読んだばかり
ヒント:読んだばかり
2008/10/14(火) 10:41:05
2008/10/14(火) 11:14:57
>>57
日本語でおk
日本語でおk
2008/10/14(火) 18:12:29
前スレと>>54見てこれなら、真性馬鹿はゆとりとは一味違うな
60デフォルトの名無しさん
2008/10/15(水) 10:02:39 横だが本気で意味わからん
真正馬鹿でもゆとりでもいいから是非日本語で詳しく解説してくれ
ちなみに前スレって一言でまとめると
「斜め上発言でアンチからフルボッコされるドM信者スレ」
だよ?
真正馬鹿でもゆとりでもいいから是非日本語で詳しく解説してくれ
ちなみに前スレって一言でまとめると
「斜め上発言でアンチからフルボッコされるドM信者スレ」
だよ?
2008/10/15(水) 18:03:39
斜め上発言で信者からも「アンチからも」フルボッコされるドMアンチもいました
2008/10/15(水) 18:25:37
え?そんなの覚えないけど?
すごく興味あるから印象操作じゃないならポインタ示してね
すごく興味あるから印象操作じゃないならポインタ示してね
2008/10/15(水) 22:58:32
>>60
すごく興味あるから印象操作じゃないならポインタ示してね
すごく興味あるから印象操作じゃないならポインタ示してね
64デフォルトの名無しさん
2008/10/16(木) 10:17:02 前スレ987
>まぁ信者は問題点に納得した時点で沈黙するからなぁ
>結局新規の馬鹿信者が斜め上発言してアンチがフルボッコにするループはいくらでも続く
前スレ988
>&&批判に反発してた連中は、終わった話を何度も蒸し返して
>無駄に傷口広げてる感じだったな
>しかも禿の仕様ミスであること自体は認めているから
>まともに・論理的には反論できずに
>そんなのは些細なことで問題にするほうがおかしいとか
>斜め上の話ばかりになる
>まぁ信者は問題点に納得した時点で沈黙するからなぁ
>結局新規の馬鹿信者が斜め上発言してアンチがフルボッコにするループはいくらでも続く
前スレ988
>&&批判に反発してた連中は、終わった話を何度も蒸し返して
>無駄に傷口広げてる感じだったな
>しかも禿の仕様ミスであること自体は認めているから
>まともに・論理的には反論できずに
>そんなのは些細なことで問題にするほうがおかしいとか
>斜め上の話ばかりになる
2008/10/16(木) 10:32:36
ところで、&&や||をオーバーロードすることの何が問題なの?
66デフォルトの名無しさん
2008/10/16(木) 18:38:55 結論から言うと、演算子オーバーロードはSTL向けの関数オブジェクト作るためだけに使え、
ということだな。
ということだな。
2008/10/16(木) 19:47:53
, || && は boost::spirit で活躍しているよ。
2008/10/16(木) 21:27:42
2008/10/16(木) 22:10:53
std::cout << "banana" << count << std::endl;
(ノ ゚Д゚)ノ ==== ┻━━┻
(ノ ゚Д゚)ノ ==== ┻━━┻
2008/10/16(木) 23:04:10
コンテナ継承させてよぅ
2008/10/16(木) 23:24:11
ただの質問スレだったら、protected継承でいいじゃないって答えるところだな。
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のどちらが先に評価されるか分からない(処理系依存)。
分かりにくいバグの元になる、コードの可搬性を損なう、などの理由から
&&や||のオーバーロードは推奨されない。
組み込み型に対する&&や||は短絡といって、
左から順に評価していって、
結果が分かったらそれ以降の評価を行わない仕組みになってる。
たとえば、
bool f1(); bool f2();
if ( f1() && f2() )
という式があったとすると、f1が偽の場合、f2は評価されないことが保証される。
しかし、&&や||のオーバーロードの場合は関数呼び出しと解釈されるため、短絡がない。
それどころか、関数呼び出し順序は標準に規定されていないため、
どちらが先に評価されるかすら分からない。
my_bool b1(); my_bool b2();
if ( b1() && b2() )
この場合、b1とb2のどちらが先に評価されるか分からない(処理系依存)。
分かりにくいバグの元になる、コードの可搬性を損なう、などの理由から
&&や||のオーバーロードは推奨されない。
2008/10/17(金) 00:22:41
2008/10/17(金) 00:26:31
>>組み込み型に対する&&や||は短絡といって、
それと同じ構造にすればいいだろ
それと同じ構造にすればいいだろ
2008/10/17(金) 00:29:42
>>74
C#とかそれを目指している。
C++でもBoost.Lambdaは頑張った。
あと今から同じ構造になる仕組みをC++に持ち込んだとしても、
「互換性のため」現状の&&と||もそのまま残ること間違いない。
C#とかそれを目指している。
C++でもBoost.Lambdaは頑張った。
あと今から同じ構造になる仕組みをC++に持ち込んだとしても、
「互換性のため」現状の&&と||もそのまま残ること間違いない。
2008/10/17(金) 01:43:05
比較的どうでもいい豆知識だな
2008/10/17(金) 01:51:46
遅延評価の考え方がどうでもいい豆知識っすか
Cにどっぷりはまるとそうなっちゃうのね
Cにどっぷりはまるとそうなっちゃうのね
2008/10/17(金) 02:33:00
短絡評価 short-circuit evaluation と遅延評価 lazy evaluation はまったくの別物だぞ
遅延評価は、必要になるまで変数の値の計算を先延ばしにするHaskellのアレだ
遅延評価は、必要になるまで変数の値の計算を先延ばしにするHaskellのアレだ
2008/10/17(金) 02:37:48
同じ様なもんだろ
右オペランドを遅延評価することを短絡評価という
右オペランドを遅延評価することを短絡評価という
80デフォルトの名無しさん
2008/10/17(金) 02:44:31 じゃあ遅漏評価は?
2008/10/17(金) 03:07:21
>79
遅延評価はもっと広い意味の言葉だから混同するとややこしい。
遅延評価はもっと広い意味の言葉だから混同するとややこしい。
2008/10/17(金) 08:55:24
>>64
何の指摘にもなってないよ
何の指摘にもなってないよ
83デフォルトの名無しさん
2008/10/17(金) 09:10:07 オーバーロード関数のDLLが・・・
2008/10/17(金) 09:13:17
>>83
日本語でok
日本語でok
2008/10/17(金) 10:40:56
オーバーロードしたら&&が論理和どころか論理演算ですらある必要がないので、
通常と同じ動作にしたらいいじゃんという主張は無意味だろ。
通常と同じ動作にしたらいいじゃんという主張は無意味だろ。
2008/10/17(金) 11:07:09
演算子の元の意味と大きく異なるオーバーロードは駄目だろ
おまえは+が加算である必要が無いからって乗算にするのか?
おまえは+が加算である必要が無いからって乗算にするのか?
2008/10/17(金) 12:04:19
> 演算子の元の意味と大きく異なるオーバーロードは駄目だろ
そこで << ですよ
そこで << ですよ
2008/10/17(金) 12:10:38
2008/10/17(金) 13:09:18
常識という眼鏡で僕達の世界はのぞけやしないのさ
夢を忘れた古いプログラマーたちよ
アンドじゃないアンドじゃない
素敵な世界
夢を忘れた古いプログラマーたちよ
アンドじゃないアンドじゃない
素敵な世界
2008/10/17(金) 15:03:38
>>88
operator&&() が my_bool のメンバならね。
でも
bool operator&&(const my_bool& a, const my_bool& b)
かも知れない。
更に、b1 が左辺値ではなく my_bool を戻す式だったとき、
やっぱり b2 とどっちが先に評価されるかは判らない。
operator&&() が my_bool のメンバならね。
でも
bool operator&&(const my_bool& a, const my_bool& b)
かも知れない。
更に、b1 が左辺値ではなく my_bool を戻す式だったとき、
やっぱり b2 とどっちが先に評価されるかは判らない。
2008/10/17(金) 16:06:02
>>90
引数の評価順を重要視する意味がよくわからん
引数の時点で、真偽がわかったとしても関数から抜け出す手段は無いとおもうが?
b1 && b2 && b3
の式の場合
operator&&(operator&&(b1, b2), b3)
となって、operator&&(b1, b2)が偽の場合でも、一番外側のoperator&&()が実行されるから嫌だって事なら、ちょっとだけ理解できるかもしれないが
だからと言って、C++の欠陥だと大声で言うようなものでも無いと思うのですが
引数の評価順を重要視する意味がよくわからん
引数の時点で、真偽がわかったとしても関数から抜け出す手段は無いとおもうが?
b1 && b2 && b3
の式の場合
operator&&(operator&&(b1, b2), b3)
となって、operator&&(b1, b2)が偽の場合でも、一番外側のoperator&&()が実行されるから嫌だって事なら、ちょっとだけ理解できるかもしれないが
だからと言って、C++の欠陥だと大声で言うようなものでも無いと思うのですが
2008/10/17(金) 16:52:03
>>91
短絡評価のメリットが解らない、ってこと?
短絡評価のメリットが解らない、ってこと?
2008/10/17(金) 17:17:31
2008/10/17(金) 17:41:19
2008/10/17(金) 18:00:57
バグの原因は小さいものだから
大きな問題ではないと考えるのも無理はない
大きな問題ではないと考えるのも無理はない
2008/10/17(金) 18:05:33
INT i=1,j=1; //なんかint的なクラスだと思いね
i++ || j++;
cout << i << "," << j;
||がオーバーロードされていなければ「2,1」が表示される
されていれば「2,2」が表示される
open(file) && abort();
&&がオーバーロードされていなければ、ファイルオープンに成功すれば処理が続行される
されていればファイルオープンに成功したのに異常終了する
i++ || j++;
cout << i << "," << j;
||がオーバーロードされていなければ「2,1」が表示される
されていれば「2,2」が表示される
open(file) && abort();
&&がオーバーロードされていなければ、ファイルオープンに成功すれば処理が続行される
されていればファイルオープンに成功したのに異常終了する
2008/10/17(金) 18:32:16
2008/10/17(金) 18:46:18
2008/10/17(金) 18:52:24
つーか短絡評価しないなら&や|だけでいい
何のためにわざわざ&&や||が用意されてると思ってるんだ
何のためにわざわざ&&や||が用意されてると思ってるんだ
100デフォルトの名無しさん
2008/10/17(金) 18:54:39101デフォルトの名無しさん
2008/10/17(金) 18:55:39 そうだな
ごめんアホなこと言った
ごめんアホなこと言った
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★8 [ぐれ★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- いじめ後遺症 15年前のトラウマに苦悩する当事者「夢の中に出てくる」「された側は一生ものの傷」 [♪♪♪★]
- 【実況】博衣こよりのえちえちダンガンロンパ6🧪
- 【実況】博衣こよりのえちえちダンガンロンパ5🧪
- 【高市速報】毎日の調査で衆院投票先、自民2.4維新7.2立憲14.5国民6.0公明8.4参政4.8共産21.7れいわ19.3保守1.2社民3.6みらい10.8 [369521721]
- 高市政権「な、なぜだ?なぜレーダー照射問題でもアメリカは日本を助けてくれないんだ!?」 [805596214]
- 🏡パン🍞つー✌まる👌見え👊😅👊
- 【正論】検察「山上よ、どんな事情があろうと暴力が許されない」 [442080748]
