[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/10 01:09 / Filesize : 46 KB / Number-of Response : 242
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【信者】C++の問題点【アンチ】



1 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 09:13:53 ]
C++の問題点について語るスレです

C++ってなんであんなに肥大化しちゃったの?
pc11.2ch.net/test/read.cgi/tech/1219902495/

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だし

101 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:55:39 ]
そうだな
ごめんアホなこと言った

102 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 19:44:48 ]
>>98
論理式が返すのは、論理値だろ
論理式の処理過程を期待してプログラムするってのは、真値が特定の値である事を期待してプログラムするのと同じじゃん


103 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 19:50:03 ]
>>102
そうだよ、一部ではもはやただの論理式ではなく制御構造と見なされているということ。
C++ではあまり見ないけど、PerlとかでHogeHoge or dieとか。

104 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 19:50:39 ]
>>102
>論理式の処理過程を期待してプログラムする

「期待」じゃなくてC/C++は「仕様で」「明確に」「わざわざ」評価順を
定義しているわけだが
&& || に関してはな
何の意味も無くそんな仕様にしてると思ってんの?

ま、&&や||は論理演算、bool代数だよな?そこはその通りだ。
フローコントロールもセマンティクスも変えちまう
オーバーロードなんてもってのほかだよな?

105 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 19:59:18 ]
bool banana;

if(!banana)
{
// ↑気持ち悪いねこれ。
}

106 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:01:54 ]
if(true != banana)
if(false == banana)

好きなほうを選べ

107 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:02:26 ]
VB.NETではVBには無かった短略評価の
AndAlso OrElse という(キモい)演算子が追加されているのだが
その意味も分からないんだろうねえ



108 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:10:39 ]
>>104
言ってることがわからない
&&や||をオーバーロードできるように定義しているのも「仕様」なんじゃないの?


109 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:12:51 ]
>>108
だから、その仕様が不整合で良くないっつー話をしてるんだろ
言うまでも無く後から突っ込んだオーバーロードの仕様がマズい

110 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:19:03 ]
&&や||をオーバーロードの場合はコンパイラが短絡すればいいだけだろ

111 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:27:57 ]
何だそれ
互換性が無くなってさらにカオスになるだけじゃねえか

112 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:31:27 ]
&&と||の意味がわかんねー奴はC++厨気取りたいんなら
More Effective C++ぐらい嫁

113 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:36:52 ]
.front()も.begin()も同じで良いジャン
なんで違うの

114 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:48:12 ]
>>113
hoge.front()は*hoge.begin()相当。
強いて言えば、beginからfrontは取り出せるが逆は一般にできないんでfrontがやや余計かな。

115 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:52:08 ]
front取り忘れたのかね

116 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:20:33 ]
map持っていて

<<でkeyを流し込んだら valueが返ってくるクラスはあり?

117 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:29:44 ]
演算子でやる理由がわからん



118 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:46:28 ]
>>116
[]演算子で標準装備してない?
まあこれはkeyを持ってなかったらvalueにはデフォルトコンストラクタで生成
した値が代入されてしまうんだけど

119 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:51:59 ]
[]だとポインタのとき面倒じゃね?


120 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:54:05 ]
value = (*hogemap)[key]
でおけ

121 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:58:28 ]
あえて operator()

122 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 22:39:11 ]
ttp://homepage2.nifty.com/well/Operator.html#arrow_ast



なんでもあり

123 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 23:04:00 ]
>>119
いやポインタに対して使うときは全部だろ

124 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 00:55:05 ]
C++のIDEに自動的にヘッダやnamespaceを宣言してくれる奴って何かあります?
Javaとかだと適当にクラス使ってもクラスパスから候補探してくれるのがメジャーなIDEの基本機能にある。

125 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 05:16:34 ]
>>124
ゆとりは黙ってろよ(笑)
そんな余計な機能はIDEには要らない

126 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 05:38:24 ]
自動的にヘッダを追加するようなIDEは怖くて使えません

127 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:39:49 ]
さすが生産性の無さでユーザーがみるみる減っている言語だけはあるw



128 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:56:13 ]
>>124
C++のヘッダのincludeは単なるプリプロセッサ命令で、やってることは
原始的なコピペ
Javaは自己記述的なjarやclassからシンボルをインポートしてるわけだ

C++でそういうことをやるのは技術的に不可能ではないだろうが
向いているとは思えんな
現代的なIDEなどが出るよりはるか以前に作られた化石言語なのだから仕方が無い

129 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 14:06:23 ]
C++はIDEととことん相性悪いからな
まるでIDEを妨害しようとしているかのような仕様

VSやBuilderやCDTはマジ頑張ってると思うのですよ
頭が下がる

130 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:29:58 ]
C++を有難がって使ってる奴なんているの?
居たとしたらちょっと馬鹿すぎる

131 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 21:38:06 ]
文句なしの代替が無いから使っているだけだよ。

132 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:40:11 ]
有難がって使うプログラミング言語なんてないだろ。

133 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:51:52 ]
>>130
C#がネイティブ初めから吐いてくれたらそっちに移行したいんだが
仕方ないからC++を使ってる

つーかC#プログラマ恵まれ過ぎだろ・・・

134 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:53:30 ]
C++が一番簡単だから使ってる


135 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:59:07 ]
結局、

136 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 23:00:16 ]
結局、このスレにC++信者なんて居なかったってオチか

137 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 01:23:10 ]
>>105
↑頭悪いねこれ。



138 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 14:06:06 ]
C++が最高だと思って使ってる奴はいないだろ。
ただ分かってない上司やクライアントがいるからC++の仕事もあるってだけだ。
本当はCで十分だったり、C#やJavaの方が効率良かったりするんだが。

139 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 14:12:04 ]
C#やJavaをフロントエンドにして、
OS依存部分や、処理が思い部分を
C言語で書くスタイルがベストだな。

既にOracleがそうだし、CADもそういうのがある。

140 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 14:23:15 ]
C++はプログラム初級〜中級者向けのおもちゃとしてはそこそこ面白い
だが普通はすぐに暗黒面に気付いて使うのを辞めるor仕事で仕方なく使うだけだ

141 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 14:41:12 ]
その通り過ぎて何も言えねえ…
良い代替言語があれば良いんだけどね

142 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 14:53:48 ]
D言語がふらふらしてなければなw
創始者が「仕様変えるぞー」を未だに自粛しないからこまったものだ。

143 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 16:11:15 ]
まあ暗黒面に気付かないうちはまだまだ初心者ってことだ
それに気付いた時にはバッドノウハウばかりで他言語に応用が効かないのも悔しいところだ

144 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 16:19:28 ]
Plan9(笑)
D言語(笑)

145 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 16:37:25 ]
バッドノウハウを追求するのは楽しい
しかしチームでやる仕事ではゴメンだね

146 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 11:30:38 ]
クライアントから例外もテンプレートも(わからないから)使わないで欲しいって言われた
周辺環境もある意味では言語の問題点に含まれると思う
特にC++の場合、ひとによってスキルの差がありすぎ
せっかくのリソースが活かせないことが多い

まあ割の良い仕事だから我慢するけど、これならCの方が開発効率良いよorz

147 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:05:15 ]
Cの方が開発効率良い、に関しては、
だったらクラスも何も使わないでC同然に書けばいいじゃないと思う。



148 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 17:14:26 ]
>>146
クラスがあるだけで private とクラスの名前空間があるから
かなり精神的に楽になる。依然マクロの脅威はあるけど。

149 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 18:05:19 ]
>>147
それならCでいい、というかCのがいいだろ
malloc()の戻り値などをいちいちキャストする必要は無いし
Cリンケージのためにいちいちextern "C"などと書く必要も無い






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<46KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef