C++の問題点について語るスレです
C++ってなんであんなに肥大化しちゃったの?
http://pc11.2ch.net/test/read.cgi/tech/1219902495/
【信者】C++の問題点【アンチ】
■ このスレッドは過去ログ倉庫に格納されています
2008/10/10(金) 09:13:53
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 そうだな
ごめんアホなこと言った
ごめんアホなこと言った
102デフォルトの名無しさん
2008/10/17(金) 19:44:48103デフォルトの名無しさん
2008/10/17(金) 19:50:03104デフォルトの名無しさん
2008/10/17(金) 19:50:39 >>102
>論理式の処理過程を期待してプログラムする
「期待」じゃなくてC/C++は「仕様で」「明確に」「わざわざ」評価順を
定義しているわけだが
&& || に関してはな
何の意味も無くそんな仕様にしてると思ってんの?
ま、&&や||は論理演算、bool代数だよな?そこはその通りだ。
フローコントロールもセマンティクスも変えちまう
オーバーロードなんてもってのほかだよな?
>論理式の処理過程を期待してプログラムする
「期待」じゃなくてC/C++は「仕様で」「明確に」「わざわざ」評価順を
定義しているわけだが
&& || に関してはな
何の意味も無くそんな仕様にしてると思ってんの?
ま、&&や||は論理演算、bool代数だよな?そこはその通りだ。
フローコントロールもセマンティクスも変えちまう
オーバーロードなんてもってのほかだよな?
105デフォルトの名無しさん
2008/10/17(金) 19:59:18 bool banana;
if(!banana)
{
// ↑気持ち悪いねこれ。
}
if(!banana)
{
// ↑気持ち悪いねこれ。
}
106デフォルトの名無しさん
2008/10/17(金) 20:01:54 if(true != banana)
if(false == banana)
好きなほうを選べ
if(false == banana)
好きなほうを選べ
107デフォルトの名無しさん
2008/10/17(金) 20:02:26 VB.NETではVBには無かった短略評価の
AndAlso OrElse という(キモい)演算子が追加されているのだが
その意味も分からないんだろうねえ
AndAlso OrElse という(キモい)演算子が追加されているのだが
その意味も分からないんだろうねえ
108デフォルトの名無しさん
2008/10/17(金) 20:10:39109デフォルトの名無しさん
2008/10/17(金) 20:12:51110デフォルトの名無しさん
2008/10/17(金) 20:19:03 &&や||をオーバーロードの場合はコンパイラが短絡すればいいだけだろ
111デフォルトの名無しさん
2008/10/17(金) 20:27:57 何だそれ
互換性が無くなってさらにカオスになるだけじゃねえか
互換性が無くなってさらにカオスになるだけじゃねえか
112デフォルトの名無しさん
2008/10/17(金) 20:31:27 &&と||の意味がわかんねー奴はC++厨気取りたいんなら
More Effective C++ぐらい嫁
More Effective C++ぐらい嫁
113デフォルトの名無しさん
2008/10/17(金) 20:36:52 .front()も.begin()も同じで良いジャン
なんで違うの
なんで違うの
114デフォルトの名無しさん
2008/10/17(金) 20:48:12115デフォルトの名無しさん
2008/10/17(金) 20:52:08 front取り忘れたのかね
116デフォルトの名無しさん
2008/10/17(金) 21:20:33 map持っていて
<<でkeyを流し込んだら valueが返ってくるクラスはあり?
<<でkeyを流し込んだら valueが返ってくるクラスはあり?
117デフォルトの名無しさん
2008/10/17(金) 21:29:44 演算子でやる理由がわからん
118デフォルトの名無しさん
2008/10/17(金) 21:46:28119デフォルトの名無しさん
2008/10/17(金) 21:51:59 []だとポインタのとき面倒じゃね?
120デフォルトの名無しさん
2008/10/17(金) 21:54:05 value = (*hogemap)[key]
でおけ
でおけ
121デフォルトの名無しさん
2008/10/17(金) 21:58:28 あえて operator()
122デフォルトの名無しさん
2008/10/17(金) 22:39:11 ttp://homepage2.nifty.com/well/Operator.html#arrow_ast
なんでもあり
なんでもあり
123デフォルトの名無しさん
2008/10/17(金) 23:04:00 >>119
いやポインタに対して使うときは全部だろ
いやポインタに対して使うときは全部だろ
■ このスレッドは過去ログ倉庫に格納されています
