[表示 : 全て 最新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/

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"などと書く必要も無い

150 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:03:52 ]
>>149
147でないけど

キャストは new の仕様を促すからそのほうがいいんじゃない。new の方が楽で型安全だし。

extern "C" はCとリンクする部分だけでいいよ。普通の C のライブラリだって extern "C" 使ってるし。
extern "C" を使わないほうが型安全だし。

151 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 19:18:08 ]
>>150
newは例外まみれで鬱陶しい別の問題を引き起こすだろ
ただの関数形式のアロケータなら差し替えるのも簡単だ
C++をC++らしく使わないという仮定の話をしているようだから
それぐらいならCの方がいいと言ってるんだよ

クラスすら使わないC++で提供される付加価値よりは
グダグダなABIだの、さりげなく仕込まれる例外対策だののほうがずっと鬱陶しい

152 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 21:07:44 ]
> ただの関数形式のアロケータなら差し替えるのも簡単だ
それと同じくらいnewの差し替えも簡単だ。
void* operator new(std::size_t n)
{
return my_alloc(n); //NULLを返せば例外はthrowされない
}
void operator delete(void* p)
{
my_free(p);
}
//以下コピペするだけ
void* operator new[](std::size_t n)
{
return operator new(n);
}
void operator delete(void* p)
{
operator delete(p);
}
いや、これもずっと鬱陶しい「さりげなく仕込まれる例外対策」の内というならそれまでだけど。

153 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 00:24:04 ]
bad_allocが嫌ならnothrowつきのnewを使えばいいじゃない

ただ、例外を使わないようにするとどうせNULLチェックをサボる奴が出てくるので
むしろ有害だと思うけどな

154 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 02:02:52 ]
NULLチェックをサボるために例外を使うってことは、newする部分をまとめてtryに入れるんだろうけど、
スマートポインタかGCでもない限り、メモリリークの危険性がある。
STLで用意されてるauto_ptrはSTLコンテナに食わせられない糞仕様。


155 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 08:09:11 ]
CAutoPtr

156 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 11:08:44 ]
>>154
まだ過去の話してんのか
std::tr1::smart_ptrは今では当然のように使う

157 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 11:46:55 ]
std::tr1::shared_ptrかboost::smart_ptrのどっちかと間違えてるんだと思うが
どっちにしろどうしても必要な所で最低限の使用にしないと重すぎて酷いことになるからなぁ
auto_ptrはそこそこ軽いから割と気軽に使える

まあ、本当は生ポインタが一番いいんだけどな
プログラマが楽をするためだけにスマポの莫大なオーバーヘッドを持ち込むのは感心できない

158 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 12:17:44 ]
プログラマに苦労を強いると、バグの発生率が跳ね上がるでしょ。
多くの状況ではオーバーヘッドよりバグの方が深刻な問題になるんだから、楽はすべきだと思うけど。



159 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 13:12:15 ]
C + Boehm GCでいいやん
スマポなんかより便利だし

160 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 13:21:50 ]
>>157
boost::smart_ptr なんて存在しない。
どっちも shared_ptr。

あとオーバーヘッドなんて大したことないぞ。
ポインタに参照カウントの分の整数がついて回るだけ。
ポインタアクセス時は通常のポインタとほぼ同等
(レジスタ割り付けが多少阻害されるかもしれんが)。
コピーやデストラクト時に参照カウントの増減でこれも一瞬。


161 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 19:05:25 ]
boost::intrusive_ptr 方式のスマートポインタが好き。

162 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 20:50:24 ]
UN*X では Objective-C が使えるから無理して C++ を使う必要は無いよね

163 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:02:12 ]
>>162
極一部のUnix以外ではCが主流というオチ。

164 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:22:07 ]
unixだとc++なんか有象無象とひとつ

165 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 21:28:01 ]
>>154
ようやく次のC++0xで、コンテナに入れられるunique_ptrが入る。
参照カウントせずauto_ptrと全く同じオーバーヘッド。
まったくもって導入が遅すぎる。

166 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 19:09:41 ]
C++

C++0x

C++(笑)

167 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:28:21 ]
newの例外の問題がなんなのか良くわからんが
template<class T>class vAlloc{
public:
 T *m_obj;
 vAlloc() : m_obj(NULL){};
 vAlloc(int size) : m_obj(NULL){
  Alloc(size);
 };
 ~vAlloc(){
  delete []m_obj;
 };
 Alloc(int size){
  delete []m_obj;
  try {
   m_obj = new T[size];
  } catch(std::bad_alloc) {
   cerr << "メモリを増設してください" << endl;
   m_obj = NULL;
   exit(0);
  }
 };
};
こういうクラスを作っといて
vAlloc<char> str1(100);
strcpy(str.m_obj, "Hello");
こうやって利用すればいいんでないの?


168 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:34:53 ]
>>167
言いたい事は分かるけど、コピーコンストラクター位はつけた方がいいと思うんだ



169 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:46:13 ]
「解決できるけどデフォルトで放置されている問題」が多いんだな

170 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:55:15 ]
>>167
なんだそれ

vAlloc<char> str1(100);
なんてやるなら
char str1[100];
でいいだろ

そのクラスはそれ以上のものをそれは何も提供していないし
何の解決にもなっていない

171 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:02:26 ]
STLとかはAllocator差し替えられるけど
alloc()が例外投げること前提に作られてて
NULLチェックなんてしてるわけねーし

C++でデフォのnew捨てるってのは
事実上、標準を含む大半のライブラリを捨てるってこと

172 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:03:41 ]
>>170
何言ってるんだ?
君のコンパイラは、

char str1[strlen(hoge) + 1];

こんな使い方が出来るのか?


173 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:05:16 ]
>>172
ああ、いいたいことは分かった
alloca()っぽいことが出来るんだね

alloca()の代用にしかなってないけど

174 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:09:13 ]
コンストラクタやデストラクタが動くんだからalloca()の代用は言いすぎか

まあ、そういうことが言いたいんじゃなくて、newが使われるシナリオの
ごくごく一部しかカバーできていないだろ、といいたいんだよ

175 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:41:56 ]
>>174
newが使われる際の問題って他にあるの?


176 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:21:08 ]
>>167
そんなことするならset_new_handlerとvector(もしくはboost::scoped_array)で十分だと思う。

177 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:50:22 ]
>>176
newが例外をスローしないようにするのなら
vectorなんて使えないんじゃないのか

new_handlerの中でabort()でも呼ぶのならいいだろうけど、もっと悪いような

178 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 17:37:38 ]
>>177
> new_handlerの中でabort()でも呼ぶのなら
そういう仮定。だって>>167ではexitだったからこそ。



179 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:06:25 ]
そういうことか。よく見てなかった。
つうかabort()だのexit()だの呼んでる時点でダメだろ

180 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 19:09:35 ]
俺の探し方が悪いのか、abort()だのexit()だの呼んでる以外のサンプルコードを見た事がない


181 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 19:13:25 ]
ま、new handlerでできることはそれぐらいだろ
つまり、new handlerは、「それでいい」プログラムにしか使えないってことだよ

182 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 19:39:56 ]
予めでっかいメモリを確保→newハンドラで解放すれば、
ヒープに空きができてnewを成功させられるぜっていう話を聞いたことがある。
実用性皆無にしか思えない。

183 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:39:17 ]
new handler で必ずしも必要でないキャッシュをパージすることが考えられる。
Java の SoftReference がそんな感じ。

184 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 09:41:16 ]
bad_allocが発生する様な環境下で、必要のないキャッシュを持つ設計が正しいのだろうか?


185 名前:デフォルトの名無しさん [2008/10/30(木) 10:01:22 ]
あっちと内容がかぶってる
C++が糞言語なのはみんな知ってるから一箇所でやってくれないかな

186 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 13:05:43 ]
どこ?

187 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 04:11:41 ]
>>172
C++ってそんな事も出来ないのかw

188 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 07:33:07 ]
配列ごときをいちいち動的にヒープに取るような非効率言語とは違うんですっ!



189 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 08:49:23 ]
>>187
Cにも出来ないけどな


190 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 11:53:20 ]
>>189
Cは低級言語だから別にいいんだよw

191 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 12:23:05 ]
>>190
'C++'の'C'部分に独自の拡張を加えちゃ駄目じゃん


192 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 12:37:38 ]
C言語は高級言語だろ・・・
抽象化水準が低いから中級言語って言う奴はいたけど。

193 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 12:54:55 ]
>>189
C99なら嘆かわしいことに出来てしまう

まあ、あんなものC言語じゃないけどな

194 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 19:11:25 ]
演算子のオーバーロードはヤバイと
ム半年目の頃に既に俺は思ってたね
関数の引数が参照渡しなのもヤバイ

195 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:30:24 ]
演算子多重定義関数での引数と言えば、const参照が相場だろ。
2行目が値渡しでないからやばいと言っているのであればそれは違う。

196 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:35:07 ]
const参照渡しが安全だと思ってるアホ発見

197 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:23:34 ]
Cに++した程度の言語だ
やばくて当たり前だっての

オブジェクト指向アセンブラに何処まで求めてるんだ?


198 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:39:19 ]
本当に C に ++ してくれたのなら、どんなに良かった事か…
本当の意味で C with Class だったら更に良かったんだがな

残念言語



199 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 02:52:09 ]
>>192
お前その発言がどんだけ化石か自覚してるのか?

200 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 09:33:16 ]
C++の++は良く分からん物でオーバーロードされてるだろ

201 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:03:54 ]
もしかしたら実際の処理は--かもしれない

202 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:33:56 ]
そしてC++の仕様上、それを知る事は不可能に近い

203 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 16:48:48 ]
>194-196のやりとりがよくわかりません。
演算子定義をconst参照で受けて、さらに注意しなければいけないことって何?

204 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:08:29 ]
多分、>>196 にしか解らない深い理由があるんだろう。

205 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:33:21 ]
const_cast

206 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:24:16 ]
それくらいでびくついているようではC++なんて使えないけどな。
全くもってそこらじゅう罠だらけだもん。

207 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:22:36 ]
・constなんてconst_castや普通のキャストで誰でも簡単に外せる
・constを外さなくたってmutableメンバがあれば変更し放題
・deleteに対してconstは全く無力

何かを安全にするつもりでconstを使ってるなら、それは時間の無駄です
constは何も守ってくれません

208 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:45:34 ]
const_cast は使うこと自体が有害だと思われ



209 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:46:39 ]
気休めにしかならないと分かっていても、すがりたくなる。
ほかに信じられるものなんて何もないから。

210 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:51:57 ]
setの要素を変更する時にconst_castは不可欠です

211 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:58:17 ]
あれってconst付いていたっけ?

212 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 22:04:48 ]
setの要素を直接変更したらまともに動作しないぞ
removeしてからinsertしないと

213 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 02:46:00 ]
EffectiveSTLの22番だな

214 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 03:43:36 ]
比較関数が見ないメンバであれば問題ない。

215 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 09:35:55 ]
const_castなんてC++の問題ではなく、C++を利用するプログラマの問題だろ

216 名前:204 mailto:sage [2008/11/07(金) 12:14:46 ]
>>207
やっぱりそういう話か。下らん。

217 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:23:46 ]
で、外注先のプログラマに問題が無い事は誰が保障してくれるんだ?
言語側で保障してりゃ良いだけの事を、本当に非効率的な言語(笑)だわ。

218 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:01:39 ]
問題のあるプログラマを雇っている外注なんぞ切ってしまえ




219 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:05:50 ]
また始まった
ぼくはそんなつかいかたしないからC++はわるくないんだい!!

なんか本気で言ってそうでかわいそうになる

220 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:29:08 ]
何のためにconst_castがあるのかも考えず、不用意に使うような奴を擁護する事の方が信じられん
きっと、大阪の轢き逃げみたいな事件を起こすような奴に違いない

221 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:53:25 ]
はいはい、今度は論点のすり替えですね
フルコースですか
次のメニューをお願いします

222 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 17:54:41 ]
レッテル張りも消化済みでしたね
引き続きどうぞ

223 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:12:17 ]
そもそも、言語側で保障する方が非効率だから、保障しなかったのにね

224 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 20:36:53 ]
const_castはどう考えても内容を変更しないのになぜか非定数を要求するAPIのためのもの。

Motifやってた頃はお世話になりました。

225 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 20:59:11 ]
const版・非const版で多重定義するときにも使える。
const char* strchr(const char* s, int c);
inline char* strchr(char* s, int c)
{
const char* t = s;
return const_cast<char*>(strchr(t, c));
}
Cのstrchrより型安全性が増しているという不思議。もっともCとの互換性は無くなったが。

226 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:36:09 ]
アホな事する奴がconst_castなんて律儀に書くわけないという

227 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:42:36 ]
そういうアホは自分に影響が無い程度に放っておけばいいんです。

228 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:01:46 ]
どうしてSTLってstd::の中に全部ぶち込んでるの?
整理とか出来ない人が作ったの?



229 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:40:10 ]
とりあえず、グローバルに全部散らばっているよりは遥かにましです。

230 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 19:11:13 ]
STLは十分整理されているからそれで困ったことはないよ。
名前空間はいろんな人たちが集まって何かを作るときの応急処置ぐらいに思っておいた方がいいよ。
boostは移行中or統合中とかがあって、一応名前空間で区別してるけど
using使い出すともうカオスになるよね。

231 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 22:32:08 ]
>>228
あなたならどう整理する?

232 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 23:17:56 ]
.NETみたいに

233 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 02:10:38 ]
名前空間も罠の塊だからあんまり多いと困る

234 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:31:19 ]
>>233
using namespaceとか使うから罠に嵌るんじゃないのか?

235 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 17:00:09 ]
そんなもん使わなくったって落とし穴はいくらでもあるよ
C++にはKoenig Lookupという素敵な仕組みがあるから

236 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 08:50:37 ]
signed と unsigned の比較くらいできるようにしてくれっつーの!
ヽ(`Д´)ノ

237 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 12:49:34 ]
signed廃止しようぜ
負の数なんてなくても平気

238 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:23:58 ]
>>226
そういう奴はふつー、Cスタイルのキャスト (万能) 使うよなあ。



239 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:39:57 ]
>>237
そしてsigned_intクラスを作るんでしょ。

240 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 03:31:15 ]
暗黙の変換がなくなるだけでも上等。

241 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 10:36:41 ]
分の悪い取引だな






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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