トップページ⇒tech
537コメント123KB

boolやenumをintで代用する奴は氏んだ方がよい

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
命名規約もドキュメントもなく何型かわかるはずもないのに
「チミはなんで勝手にboolなぞという型で受け取ってるのかね!これは列挙型だよ!君のせいで修正が大変だ」
とか言われると心底ムカつく。

みんなはどうよ?
0232デフォルトの名無しさんNGNG
>>231
早く>>227に対して回答しろ
0233デフォルトの名無しさんNGNG
vector<bool>をいちいち自作する奴は馬鹿
0234228NGNG
vector<bool>はSTLではないなんて当たり前すぎるよね。
何?
プログラミング言語C++第三版のP531 16.3.11に載ってるvector<bool>は何かって?
そんなのBjarne Stroustrupが勝手に言ってるだけだろ。
俺がvector<bool>はSTLではないって言ったら、vector<bool>はSTLでは無いんだよ。
分かったか知障ども。
0235デフォルトの名無しさんNGNG
vector<bool>は仮にSTLでなくても標準で定義されているわけで、
いちいち自作するのは馬鹿。
0236228(本物)NGNG
>>234
こういう事(詐称)する人って本当にいるんですね。正直怖いしキショい。
もうレス番号つけて書き込みません。
0237デフォルトの名無しさんNGNG
そういうことか。やっと納得した。<vector<bool>
0238デフォルトの名無しさんNGNG
流行ってるのかこの話題?

C++は難しすぎ 難易度:2
http://pc2.2ch.net/test/read.cgi/tech/1063323615/l50
0239デフォルトの名無しさんNGNG
std::vector<bool>なんて糞なクラス使わずにboost::dynamic_bitset使え。
0240デフォルトの名無しさんNGNG
>>239
できるだけ標準を使いたいわ
0241デフォルトの名無しさんNGNG
boost も準標準だと思うが
0242デフォルトの名無しさんNGNG
>>241
標準と準標準は大違い
0243デフォルトの名無しさんNGNG
サポートされていない標準に意味はあるのでしょうか?
0244デフォルトの名無しさんNGNG
結局省略を認めると認識に間違い(?)ができやすいからオレは好きじゃない。
if(a==TRUE)は正直ありだとも思うが、まあ互換性を考えたらやめたほうがいいんだろうな。

上のほうでif(2)は真だからドウのと書いてあるがこれも結局
if( 2 != FALSE ) なだけで、結果真(1)が返るからif構文の中が実行されるのである。
if( 2 == TRUE ) じゃ実行されないからTRUEを比較に使うのはよろしくないな。やっぱ(ワラ
0245デフォルトの名無しさんNGNG
bool型で != false を省略するのはいいが、
他の整数型やポインタでやらないで欲しい。

「もし 顧客情報ポインタ なら処理する。」
「もし 在庫数 なら処理する。」

日本語だったら、こんな風に書くやついないだろ?
0246デフォルトの名無しさんNGNG
日本語じゃないからな。
0247デフォルトの名無しさんNGNG
自然言語では冗長さや言葉足らずがあるからな
0248デフォルトの名無しさんNGNG
>>245 ダサ
0249デフォルトの名無しさんNGNG
>>248
そうです。省略するのはダサいのです。
0250デフォルトの名無しさんNGNG
>>249
あれは省略ではなく
むしろ付ける方が蛇足というものなんだが
0251デフォルトの名無しさんNGNG
>>250
つまり本物のプログラマは通を気取るために
「もし在庫数でないならば出荷処理する。」
「もし顧客情報ならば顧客情報を表示する。」
とわざと一般人にはわからないように表現するという事ですね?
0252デフォルトの名無しさんNGNG
本物のプログラマはそんな中途半端に冗長な文章なんか書きません。
0253251NGNG
>>252
馬鹿にもわかりやすいようにコード上での表現を日本語にしてあげたんですけど、
それすらも理解できない馬鹿がいるとは驚きを禁じ得ません。
0254デフォルトの名無しさんNGNG
>>253
おまえはひまわりでも使っとけ
0255デフォルトの名無しさんNGNG
>>253
( ´_ゝ`)フーン 一般人にソースコード理解してもらって何が嬉しいの?
0256デフォルトの名無しさんNGNG
>>255
if(p) {}
と
if(p!=NLLL){}
と
どっちが判りやすいか、おまえには判るか?
0257デフォルトの名無しさんNGNG
もちろん前者ですね。
0258デフォルトの名無しさんNGNG
俺も前者だな
0259デフォルトの名無しさんNGNG
ポインタの場合は特に
if ( p ) や if ( ! p ) の方が自然と理解できる
0260デフォルトの名無しさんNGNG
俺は後者だな。
0261デフォルトの名無しさんNGNG
>>256
> if(p) {}
> if(p!=NLLL){}

operator void * () とか
いくつかの cast を overload してたら
意味が同じでなくなるかもね
0262デフォルトの名無しさんNGNG
>>256
前者
0263デフォルトの名無しさんNGNG
const もまともに使えない C 厨房が大量にスレに巣食っているな。

>>256
後者だよ。

>>261
このスレはスマートポインタの場合なんて考えられない人ばかりみたいだよ。
それよりも NULL は使わずにあらゆるポインタにキャストできて、その値として 0 を返す Null クラスを作ってそれと比較するほうがいい。
0264デフォルトの名無しさんNGNG
>if(p) {}
>if(p!=NLLL){}

この二つがコンパイルできて、且つ違う意味になるような多重定義をする奴は糞
0265デフォルトの名無しさんNGNG
>>263
>const もまともに使えない

どっからこんな話でてきた?オマエの勝手な妄想だろ。この妄想厨が。
0266デフォルトの名無しさんNGNG
後者を選択する人はいっぺん医者に見てもらったほうがいいですね。
0267デフォルトの名無しさんNGNG
>>266
前者派だが、そんなことは思わんよ。どっちでもいい。
0268デフォルトの名無しさんNGNG
俺も前者派だが、
 if ( NULL != p )
とか書かないなら、別に気にならない
0269デフォルトの名無しさんNGNG
>>266は、後者選ぶ奴は眼科いけって意味だと思うw
0270デフォルトの名無しさんNGNG
自分で作ったものは前者
ライブラリなんかで
「〜した場合はNULLを返す」
とか説明が書いてある場合は後者
0271デフォルトの名無しさんNGNG
>>270
禿同。俺も、整数型について、
if(n)
とかやるけど、
if(strcmp(...))
はやらない。
0272デフォルトの名無しさんNGNG
>>270
自分が作った関数の説明をどのように書いているか、興味があるんだけど。
0273デフォルトの名無しさんNGNG
>>272
個人でしか使わないが
たいていはoperator bool定義してるから。
void*のほうがいいんだろうけどね。

0274デフォルトの名無しさんNGNG
>>256
後者。
NULLは処理系依存。
0275デフォルトの名無しさんNGNG
>>274
NULLが全bit0かどうかは処理系依存だけど
if(NULL)は必ず偽になるし、0を代入するとNULLになるのは規定されてる
0276デフォルトの名無しさんNGNG
>>275
それは知らなかった。
サンクス。
0277デフォルトの名無しさんNGNG
>>269
やっとわかった'NLLL'を選んだらダメだろ
0278デフォルトの名無しさんNGNG
>>275
>NULLが全bit0かどうかは処理系依存だけど
プ
まあそりゃ単なるdefineだから1かも2かもしれん罠。
そんなイタズラは別として、おまえ勘違いしてない?
もしくは勘違いしているのは>>274かも知れない。
ヌルポインターは必ず0ですよ? Cではね。
たいていは
#define NULL 0
だが、古いコンパイラには
#define NULL (void *)0
なんてのもあるかもね。
しかし、
#define NULL 1
などはありえません。
0279デフォルトの名無しさんNGNG
NULL と「ヌルポインタ」を混同している人がいるような気がします。
0280デフォルトの名無しさんNGNG
>>279
(゚Д゚)ハァ?
0281デフォルトの名無しさんNGNG
NULL と「ヌルポインタ」を同一視できない人がいるような気がします。
0282デフォルトの名無しさんNGNG
>>278
http://www.catnet.ne.jp/kouno/c_faq/c5.html#5
0283デフォルトの名無しさんNGNG
「ヌルポインタ定数」と「ヌルポインタ」を(
0284デフォルトの名無しさんNGNG
>>283
それが言いたかったのか?
0285デフォルトの名無しさんNGNG
>>282
何が言いたいの? 知らなかったの? 勉強不足だね(w
0286デフォルトの名無しさんNGNG
NULLの値 と「ヌルポインタの内部表現」を混同している人がいるような気がします。
0287274NGNG
>>286
正解。
私なわけだが。

逝って来るよ。
0288デフォルトの名無しさんNGNG
そういえば某所に0.0は必ず全ビット0になると言っていたやつがいたな。似たようなものか。
0289デフォルトの名無しさんNGNG
IEEE754ならそうなるが
-0.0のことを言ってるのか?
0290デフォルトの名無しさんNGNG
>>289
Cのこと
0291デフォルトの名無しさんNGNG
>>289
> IEEE754ならそうなるが

そんなこと言ったら、NULL で全ビット "0" になる処理系なんか腐るほどあるぞ。
0292デフォルトの名無しさんNGNG
>>291
>そんなこと言ったら、NULL で全ビット "0" になる

紛らわしいからおかしなこと書くな。誤解してる奴も多いし、お前も誤解していると思われるかも。
「ヌルポインターの内部表現」と書けば?
0293デフォルトの名無しさんNGNG
>>291
IEEE754のサポート率ってそんなに悪かったっけ?
0294デフォルトの名無しさんNGNG
IEEE754の単精度(4bit),倍精度(8bit)浮動小数点数は
0.0が全ビット0
-0.0がMSBが1で残りの全ビット0
参考までに
0295デフォルトの名無しさんNGNG
ヌルポインタの中の人(ry
0296デフォルトの名無しさんNGNG
>>292
確かにそうだな。
指摘ありがと。

>>293
サポート率がいいからどうしたと言うんだ ?
0297デフォルトの名無しさんNGNG
>>296
> サポート率がいいからどうしたと言うんだ ?
IEEE754非準拠のアーキテクチャは稀だから
0.0は全ビット0でほぼ正解だということ
0298デフォルトの名無しさんNGNG
標準C++にこだわりをもってコーディングしてるのに
浮動少数をゼロフィルしてたら片手落ちと言うものだろ
0299デフォルトの名無しさんNGNG
>>298
> 標準C++にこだわりをもってコーディングしてるのに
すまん >>288 以下では初耳なのだが
0300デフォルトの名無しさんNGNG
>>297
「ほぼ」正解って何だよ。

そんなこと言ったら、ヌルポインタの内部表現が全ビット "0" って言うのも「ほぼ正解」じゃないのか ?

>>288 は、「必ず」って言う奴がいたからあげつらってんだよ。
0301デフォルトの名無しさんNGNG
>>299
標準C++にこだわりが無いなら
わざわざこんな議論をするまでもなく好きにしたらいいやん
0302デフォルトの名無しさんNGNG
NULL や 0.0 が全ビットゼロでない環境を使っているやつなんてほんとにいるの?
現実劇にはほとんど困らないんじゃねーの?
自己満足的な議論としか思えないんだが。
0303デフォルトの名無しさんNGNG
そういうことを言い出すと
basic_string::c_strの領域に書き込んでもいいとか、
ベクタコンテナからT*ポインタを取り出すのにvector<T>::beginを使っていいとか
そういうことになるだろ
0304デフォルトの名無しさんNGNG
>>303
> basic_string::c_strの領域に書き込んでもいいとか、
> ベクタコンテナからT*ポインタを取り出すのにvector<T>::beginを使っていいとか
このあたりは、問題の発生する環境を何度も見たが、
今回問題になってるあたりは(一生出会わないくらい)レアなんじゃないのってこと。
実際にゼロでは困る環境を挙げて欲しい。
0305デフォルトの名無しさんNGNG
将来出てくる可能性とか思いつかんのか。オマエはCOBOLerか。
0306デフォルトの名無しさんNGNG
よほど特別な理由がない限り将来国際規格非準拠の処理系が出るとは思えないのだが
0307デフォルトの名無しさんNGNG
将来のハードウェアの進歩によってIEEE754が拡張された規格が出来るとしても
互換性は残すと思われる
0308デフォルトの名無しさんNGNG
じゃあそう思ってていいよ。

自己満足的な議論を吹っかけてくんなボケ。
0309デフォルトの名無しさんNGNG
>>302
0310デフォルトの名無しさんNGNG
>>308
( ´,_ゝ`)
0311デフォルトの名無しさんNGNG
302の時点で自己満足的な議論と結論付けてる奴が議論しようとしてるのでそれを指摘したまでですが何か?
0312デフォルトの名無しさんNGNG
>>306
>よほど特別な理由がない限り将来国際規格非準拠の処理系が出るとは思えないのだが

NULLポインタの内部表現を全ビット0にするってのは国際規格になりましたか?
0313デフォルトの名無しさんNGNG
>>312
NULLポインタの内部表現は規格以前じゃボケ
0314306NGNG
>>311

>>306 = >>307 ≠ >>302
ですが何か?
0315デフォルトの名無しさんNGNG
全bitが0だと完全に仮定してプログラム書くと何か利益あんの?
大して利益無いから規定されてないものだと思うのだが。
あるとしたらfloatとかポインタとかが詰まってる構造体をmemsetで0埋め出来るぐらいか?
0316デフォルトの名無しさんNGNG
>>315
struct SOMESTRUCT {
UINT cbSize;
... // ポインタ、浮動小数など
};
SOMESTRUCT s = { sizeof(SOMESTRUCT) };

Windowsプログラムだと頻出しないか?
0317デフォルトの名無しさんNGNG
printf("%d", (void *)0);
とかね。
0318デフォルトの名無しさんNGNG
>>316
おいおい、それは
SOMESTRUCT s = {sizeof(SOMESTRUCT), 0, 0, 0, /* ..... */};
と等価なんじゃないか?
0319デフォルトの名無しさんNGNG
そういや、整数のゼロは、全ビット0って決まってるの?
0320デフォルトの名無しさんNGNG
>>317
なにが 「とかね」 なのかわかんねー
0321デフォルトの名無しさんNGNG
>>320
>>317のコードでnullぽいんたの内部表現が分かるって事だろ
0322デフォルトの名無しさんNGNG
分かったから何?そんな話になってたか?
0323デフォルトの名無しさんNGNG
ここって何のスレ?
1.boolやenumをintで代用する奴は氏んだ方がよいと思うスレ
2.Nullポインタとfloatの0.0の内部表現は全ビット0がいいと思うスレ
どっち?
0324デフォルトの名無しさんNGNG
>>319
2の補数表現ならそうだろ
0325デフォルトの名無しさんNGNG
>>324
2の補数表現だと決まっているのかどうかが問題なのでは?
0326デフォルトの名無しさんNGNG
1の補数表現でもそうだ
0327デフォルトの名無しさんNGNG
C/C++では数値の内部表現についてまで規定されてないから
直接メモリを弄くって内容を書き換えるのはよくないってことだろ
0328デフォルトの名無しさんNGNG
結局、ゼロ初期化するつもりで memset(&obj, 0, sizeof(obj)) してはいけないってことか。
すげー不便だ。
0329デフォルトの名無しさんNGNG
>>328
objがクラスなら、それは危険だし

古い単純なデータ構造なら
DATA data={0];
obj=data;
これで簡単に0埋めできるよ
0330デフォルトの名無しさんNGNG
>>329
いや,0埋めしたとき浮動小数点数が0.0になるとは限らないとかいうから駄目なわけで
0331デフォルトの名無しさんNGNG
struct A { int i; float f; };
A a = {0};

は

A a = {0, 0};

と等価で

A a = {0, 0.0};

と等しくなるから、この場合は問題ない。
■ このスレッドは過去ログ倉庫に格納されています