C++相談室 part147

■ このスレッドは過去ログ倉庫に格納されています
2019/12/18(水) 17:56:53.03ID:uFDqtnkl
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part146
https://mevius.5ch.net/test/read.cgi/tech/1573094136/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**
2020/01/24(金) 06:17:01.23ID:z1Jr3gge
>>590
やり方としては >>594 のとおり。
「同じ翻訳単位」とは要するに1個のソースファイルってことね。

でも一般的には「グローバル変数の初期化順序に依存すべきではない」
はずだけど、初期化順序を制御したい事情に興味があるわ。
もっと一般的には「グローバル変数を使うべきでない」だけど、それは別のお話。
2020/01/24(金) 06:24:04.39ID:3pA3r7pN
初期化順序を制御したい事情なんていくらでもあるだろ

そういう事情があるにも関わらず
明示的な初期化処理で初期化しないのが問題なのであって
2020/01/24(金) 07:10:40.32ID:O5UIpEDM
>>585
SQLってBNFで書けるから普通にswitchで書けると思うけど
2020/01/24(金) 07:19:43.42ID:3pA3r7pN
書ける書けないと
適する適さない
は別
599585
垢版 |
2020/01/24(金) 07:49:27.79ID:1D9sTu/S
>>589
ツール使ってテーブルを生成させるならありだと思う。
そうでないなら、文法拡張のためにテーブルに手を入れるとか考えるだけでも嫌にならない?
あと、メンテナ交代のためにつくるドキュメントとかも。
>>598
それな
600デフォルトの名無しさん
垢版 |
2020/01/24(金) 10:04:25.17ID:M35o3kEk
コンパイル時生成では普通。
2020/01/24(金) 12:24:16.41ID:O5UIpEDM
>>598
いや、わざわざgotoなんて使う必要ないって話な
C言語の時はエラー処理でgoto使う機会もあったけどC++なら例外で対処できるし
パーサーとか書いたことないとわからんかも知れんが
2020/01/24(金) 12:25:13.21ID:O5UIpEDM
>>599
ツール使うならコードまで生成させるだろ
2020/01/24(金) 12:33:56.63ID:pOzkcTtY
breakやらgotoやら、普通に関数作ってreturnすらば済む話なのになんでここまで盛り上がるかねぇ
2020/01/24(金) 12:38:12.02ID:nymKNYgW
>>601
わざわざgotoってのが意味不明
使用リソースや所要時間は非常に少ない
ただのジャンプ命令だから

少なくとも
わざわざ関数に分けるとか
わざわざ変数を使うとか
に比べればはるかに軽い

breakに比べれば
記述量が多いので
「わざわざ」という表現を使うことはあるだろう
2020/01/24(金) 12:42:44.51ID:pOzkcTtY
>>604
そんなエラーをgoto文で書いてる様なc++ソース読むのやだわw
2020/01/24(金) 12:47:41.41ID:nymKNYgW
無能自慢か
2020/01/24(金) 12:48:34.30ID:j8mERSyw
throwと同様の構文でgotoと同じコード生成する機能があれば良いのに
2020/01/24(金) 13:03:30.24ID:O5UIpEDM
>>604
タイプ量が少ないソースがいいソースとか思ってそうw

いつの時代の人なんだよ
2020/01/24(金) 13:43:32.45ID:Jh2W8wsF
わざわざ例外使わんでもgotoで十分なときも普通にある
gotoだから絶対ダメとか思ってそう
頭かたすぎ
610デフォルトの名無しさん
垢版 |
2020/01/24(金) 13:59:14.54ID:M35o3kEk
法律で禁止するべきだな。
2020/01/24(金) 14:45:38.56ID:xfkHfIRp
>>603
ループの途中での return か?
2020/01/24(金) 16:31:56.03ID:NCsnJFfw
>>609
逆にわざわざgoto使う例外って何よ?

そんな個別情報も渡せない上にわざわざラベル名前まで考えて、goto文使う方がめんどくさいだろ

あーあれか、throwよりgotoの方が打つ文字少ないから楽とかかw
2020/01/24(金) 16:34:37.54ID:xfkHfIRp
throw って、入れる catch を RTTI を使って探すという
結構なコストのかかることをするが goto や longjmp にはそれがない
614デフォルトの名無しさん
垢版 |
2020/01/24(金) 16:36:03.61ID:M35o3kEk
情報処理の教育を受けていると、大抵のものはステートマシンに見えるので、goto使いたくなるのかもしれない。
教育の有無で思考過程が違うので、使い道が理解できない人は使うことを禁じたほうが良い。
セキュリティにもかかわるので公安委員会直轄でgoto免許試験場を創設するべき。
2020/01/24(金) 16:58:54.60ID:Jh2W8wsF
>>612
情弱かよw
「c++ goto 例外」でググれば検索結果の最初のほうだけでもこんなに出てくる

http://tomeapp.jp/archives/1029
http://www.thinkridge.com/modules/tinyd1/content/index.php?id=7
https://marycore.jp/coding/idioms-and-alternatives-for-goto-statement/
https://qiita.com/IL_k/items/2549cf2b3058a8e6c954
http://www.nurs.or.jp/~sug/soft/super/goto.htm
616デフォルトの名無しさん
垢版 |
2020/01/24(金) 17:00:51.44ID:M35o3kEk
>>615
一番上のリンクだけ見ましたが、これはミスリードじゃないだろか。
617デフォルトの名無しさん
垢版 |
2020/01/24(金) 17:06:28.80ID:M35o3kEk
>>616
二番目のリンクも見ましたが、これはgoto代わりに例外を使うべきではないというお話ですよね。
例外の代わりにgoto使えという話ではないと思うんですよ。
「あれ?ifの代わりに例外使えるんじゃね?」とはならない。
同様に「あれ?gotoの代わりに例外使えるんじゃね?」ともなりません。
618デフォルトの名無しさん
垢版 |
2020/01/24(金) 17:08:06.93ID:M35o3kEk
どれもしょぼいな。
本物のgoto使いはラベルを100個使うんですよ。
2020/01/24(金) 17:08:25.13ID:xfkHfIRp
C++歴20年でこれか。。。例外が悲しいほどわかってない
620デフォルトの名無しさん
垢版 |
2020/01/24(金) 17:08:51.86ID:M35o3kEk
あーお前らなっちゃいねえ。
gotoの使い方わかっちゃいねえ。
621デフォルトの名無しさん
垢版 |
2020/01/24(金) 17:10:14.76ID:M35o3kEk
gotoも例外も恐れなく使えと私は言いたい。
ただし、資格は必要でしょう。
2020/01/24(金) 17:11:56.02ID:KQhZ94n9
以下は 良い goto 文の使い方だと聞いたことがある。
・二重以上のブロックを抜けるために goto 文を使うこと。
・エラー処理。 <--- こう言われていたのは throw がなかった時代からだが、
          今でも throw, catch を使うより効率が良いので使っても良い
          と思われる。
623デフォルトの名無しさん
垢版 |
2020/01/24(金) 17:14:59.13ID:M35o3kEk
>>622
はいはい、そういう人には、状態遷移図を書く癖をつけることをお勧めしていますよ。
2020/01/24(金) 17:31:23.24ID:pLepfJlB
ラムダ万能説
>>615 の1つ目の2など途中で打ち切りたいときはラムダさえあればgotoも例外もいらないことがわかる
if( [?]{
...
if(//エラー発生時){
return false;
}
...
return true;
}()
&&
...
&& [?]{
...
if(//エラー発生時){
return false;
}
...
return true;
}() ){
//正常終了
}
else{
//異常終了
}
2020/01/24(金) 17:33:42.84ID:pLepfJlB
[?]は[&]だ
なんか間違えた
2020/01/24(金) 17:42:43.43ID:NCsnJFfw
>>613
だから例外処理にまで速度にこだわる意味は何だよ
if文と勘違いしてんじゃね
そんな特殊な状況を一般化するんじゃねぇよ
627デフォルトの名無しさん
垢版 |
2020/01/24(金) 17:54:06.48ID:M35o3kEk
ifより例外のほうが速いよ。
2020/01/24(金) 17:58:29.21ID:xfkHfIRp
if goto
if throw
となるわけでifと例外を比べるのはおかしい

>>626
「こだわる」とか「特殊」とかバイアス満載で話にならんな
2020/01/24(金) 18:07:28.38ID:xfkHfIRp
そもそも有名どころのコンパイラがだいたい例外禁止オプション持ってるのがどういう意味か考えてみろよ
2020/01/24(金) 18:18:37.93ID:TKM+8NJM
goto使わないで2重ループを抜けるのってどうするの?
2020/01/24(金) 18:20:42.85ID:j8mERSyw
>>628
throwが速いのは呼び出した関数がthrowする場合と戻り値で成否を返す場合の呼び出し元コード側の話だろ
余分な条件分岐命令が出力されない

代わりに例外発生時にスタック解析して例外処理用コード探すから物凄い時間がかかるが
632デフォルトの名無しさん
垢版 |
2020/01/24(金) 18:24:28.47ID:D9pKpEah
goto 賛成派の意見
「例外使え」←「ネストが増えるから嫌」
「break使え」←「深い所から出るのに無駄なフラグ増やしたくない」
2020/01/24(金) 18:31:46.19ID:xfkHfIRp
ちげーよ
「例外使え」←言われなくても使ってるよ、gotoを禁止する理由になってねえ
2020/01/24(金) 18:33:01.12ID:3pA3r7pN
goto禁止派はgotoの使い方を知らないだけ
知ってたら禁止しない
2020/01/24(金) 18:34:35.10ID:Ua1W7Zv2
gotoと例外のどちらかを禁止するなら例外を禁止したい
2020/01/24(金) 18:37:16.31ID:3pA3r7pN
Windowsの64bit環境って例外めちゃくちゃ遅いんだよね
例外が発生しない時はオーバーヘッド無いんだけど

32bitだと関数コールの度にオーバーヘッドが発生する
だから例外処理OFF機能がある
2020/01/24(金) 18:37:19.19ID:xfkHfIRp
確かに現状のC++例外はちょっと好かんところがある
いっそnested_exceptionとdynamic_castだけに統一したらどうだと思ったりする
638デフォルトの名無しさん
垢版 |
2020/01/24(金) 18:51:37.28ID:M35o3kEk
おまえら全員間違ってる。
gotoは免許制にするべきで、一律に禁止するものでも許可するものでもない。
試験に合格した者だけ使うべき。
639デフォルトの名無しさん
垢版 |
2020/01/24(金) 18:53:22.09ID:M35o3kEk
switchより例外のほうが速いよ。
2020/01/24(金) 19:29:40.95ID:3pA3r7pN
例外はめちゃくちゃ遅い
641デフォルトの名無しさん
垢版 |
2020/01/24(金) 19:31:01.53ID:M35o3kEk
それは機密だと言っただろうが。
642デフォルトの名無しさん
垢版 |
2020/01/24(金) 20:19:58.69ID:M35o3kEk
「もういいよ。オレがインデックス張ってやるから、まあ見てから言えよ。な?」
2020/01/24(金) 20:28:57.95ID:f1L6KzBl
まだしょうもないこと言い続けてんのかよ。
こういう糞議論を排除するってだけでもgotoを禁止する価値はあるな。
644デフォルトの名無しさん
垢版 |
2020/01/24(金) 20:31:46.05ID:M35o3kEk
goto使いたいものが100万人いれば、更新費用1万円として100億になる。
gotoで事故を起こした場合、行政処分がある。
取り締まるためにgoto警察も必要。
2020/01/24(金) 20:32:37.95ID:xfkHfIRp
gotoじゃなくおまえらを排除すれば
問題の本質がわからんやつによる不毛な喧嘩≠議論はなくなる

化学調味料の永久ループと寸分違わねえ
2020/01/24(金) 20:33:06.29ID:Ua1W7Zv2
例外免許とテンプレート免許と多重継承免許も必要
2020/01/24(金) 20:51:07.84ID:K3PUU+GG
なんでプログラマってこんな糞みたいな話題で延々と盛り上がるんだろうね
って、実は知ってるくせにってか
2020/01/24(金) 21:08:30.67ID:O5UIpEDM
>>614
ステートマシンでgotoって次のステートに直接飛ぶとか言ってるのか?
2020/01/24(金) 21:10:07.36ID:xfkHfIRp
FSMとデータパスか、懐かしい。。。
2020/01/24(金) 22:22:30.15ID:SKKziN9N
ダイクストラの時代にとっくに決着した話をまだダラダラやってんのか
2020/01/25(土) 00:30:42.18ID:sCkCqRFa
煽り9割マジ1割
ここはそうゆうインターネットです
652デフォルトの名無しさん
垢版 |
2020/01/25(土) 10:54:40.14ID:cxLY0DeL
大型goto免許必須なので。
2020/01/25(土) 12:01:20.82ID:Fgzm1LAC
大型二種持ってるから大丈夫
2020/01/25(土) 12:02:23.88ID:Fgzm1LAC
クラスもポインタも免許制にしよう
2020/01/25(土) 12:04:00.88ID:HbHTz3pb
絶対禁止と思っているやつは全員不合格
つーより事前審査で門前払い
2020/01/25(土) 12:08:19.96ID:Fgzm1LAC
絶対禁止と本気で思ってるヤツはいないだろ
gotoが無ければ2重ループも抜けられない
2020/01/25(土) 12:11:48.46ID:gDStPvND
gotoおじさん達いい加減にこの話終わりにしてくれない?
久しぶりに自分が参加できる話題だからってはりきりすぎでしょ
2020/01/25(土) 12:12:11.62ID:xcQv9a+F
Open Jane がDelphiで書かれたように
5ちゃんねるブラウザがC++で書かれたら
嬉しいんだけどね
2020/01/25(土) 12:28:41.85ID:bvJDNhpJ
>>657
今は他に話題ないし
話題がないと数日レス止まるようなスレじゃけえ
2020/01/25(土) 12:30:46.81ID:Fgzm1LAC
じゃ次は生ポについて
661デフォルトの名無しさん
垢版 |
2020/01/25(土) 12:38:02.14ID:cxLY0DeL
哲学的問題だから、森村進の意見も聞くべき。
662デフォルトの名無しさん
垢版 |
2020/01/25(土) 13:18:54.05ID:oEqdrxlM
>>659
話題
https://www4.nhk.or.jp/72hours/x/2020-01-24/21/17444/1199286/
663デフォルトの名無しさん
垢版 |
2020/01/25(土) 13:54:31.32ID:cxLY0DeL
宣伝乙。
NHKが来たぞーにげろー。
664デフォルトの名無しさん
垢版 |
2020/01/25(土) 13:55:49.58ID:FepESkjd
江添亮の本でstd::cout<<""にs付けろって書いてたんだけどsつけたらエラーになる
2020/01/25(土) 13:59:45.43ID:HbHTz3pb
>>657
久しぶりに笑う健康法ができてありがたかったんだよ

おーい芸人さんたち、アンコール! アンコール!
2020/01/25(土) 14:01:45.73ID:HjVTkheD
>>664
#include <string>
using namespace std::literals::string_literals;
667デフォルトの名無しさん
垢版 |
2020/01/25(土) 14:25:20.83ID:cxLY0DeL
とまあこのように、江添先生の本は、すべて理解してる人にしか理解できません。
2020/01/25(土) 14:32:55.37ID:HbHTz3pb
幼稚園児が大学の図書館へ行っても読める本ないのと同じだな
無理しないで「ぐりとぐら」くらいから始めとけ
669デフォルトの名無しさん
垢版 |
2020/01/25(土) 14:53:05.04ID:cxLY0DeL
はい、江添釣れたー。
2020/01/25(土) 14:56:16.54ID:HbHTz3pb
残念、俺は江添じゃない
興味のツボは奴と似てるとこあるけどね
671デフォルトの名無しさん
垢版 |
2020/01/25(土) 15:45:58.72ID:136JVXqR
>>666
そんなこと書いてなかった
2020/01/25(土) 15:52:56.31ID:NV/40SqZ
普通の文字列リテラルが char 型の配列であるというのは (初心者には) 分かり難いので、
いっそ一貫して std::string 型で扱うというのは悪くない方針だと思う。

だけどユーザー定義リテラルという枠組みもそれはそれでだいぶんアレな仕様なんで、どちらにしてもクソだよな。
2020/01/25(土) 16:06:56.27ID:bbXnDJeu
こんばんは、後藤です。
ところで ""s だけでは片手落ちな気がする
ちゃんと u""s みたいに文字コード指定しなかったら
string_literalsを使う意味ないような気がするんだけど
わしだけか
2020/01/25(土) 16:09:53.49ID:lY+ErK7r
>>656
関数で切り出してreturnしろカスが。
2020/01/25(土) 16:11:03.38ID:gDStPvND
uがなかった時代でもなんとかなってたんだから意味なくはないだろ
2020/01/25(土) 16:30:12.05ID:HjVTkheD
江添本は初心者向けと謳っていながらこのくらいわからん奴は帰れみたいな意思を感じる
2020/01/25(土) 16:50:56.75ID:lY+ErK7r
初心者に内容を理解してほしいんじゃなくて俺すげーってことだけ理解しろってスタンスだからな。
むしろ理解されると大したことやってないのがバレると思ってるくらいだろ。
2020/01/25(土) 16:53:23.32ID:XvrYCXmQ
C++はしたことがないが数学博士号のやつと高校卒業を一緒くたにするのが問題だろう
それぞれの学力で開始すべき章を設定するべきだ
できないとしたら著者の無能なので落胆することはない
679デフォルトの名無しさん
垢版 |
2020/01/25(土) 16:58:57.12ID:cxLY0DeL
初心者がC++に入り込まないよう防御壁として江添先生が存在するのではないか。
680デフォルトの名無しさん
垢版 |
2020/01/25(土) 17:03:37.43ID:cxLY0DeL
C++の道を行きたいなら、俺を倒してから行け。
ってことでは。
2020/01/25(土) 17:15:21.67ID:lY+ErK7r
張り合ったら明らかにプログラム書けなくなるだろ。。誤誘導すぎるわ。
682デフォルトの名無しさん
垢版 |
2020/01/25(土) 17:27:59.47ID:cxLY0DeL
C++の前に立ちはだかる屈強な門番。
俺を倒せるものでなければ入門を認めぬ。
2020/01/25(土) 18:19:41.41ID:NV/40SqZ
グダグダな C++ をグダグダじゃなく説明するのは無理だろ。
どの本を見たって少なからずグダグダか物足りないかどっちか。
2020/01/25(土) 18:23:50.63ID:qDxhJtbw
まぁ、実際の現場だと、c++なんてちょっと便利なC言語としてしか使われてないよ
未だにcharポインタやmalloc乱立してるし参照型すら使われてない。
クラスなんて関数まとめるnamespace代わりだし
2020/01/25(土) 18:25:32.23ID:NV/40SqZ
ひと昔前にstaticおじさんの話がバズったことあるけど、
たぶん現実にはけっこういるんだろうな。
2020/01/25(土) 18:26:39.08ID:mY899MyV
>>684
そんな現場もあるんだなw
2020/01/25(土) 18:32:00.68ID:4TCxFoUN
ちゅうか、C++ 使うなら charポインタは必須だ。
使いたくないなら 別の言語を使ったほうがいい。
2020/01/25(土) 18:43:08.64ID:HjVTkheD
Cのライブラリを使わない限り文字情報はすべてstringで済む
モダンC++の仕様はそういう範囲内での使用も許容している
2020/01/25(土) 18:45:55.89ID:mY899MyV
c++ではchar*は文字列とは関係ない場面でよく使う
2020/01/25(土) 18:51:29.47ID:t8q8NVJB
>>684
>クラスなんて関数まとめるnamespace代わりだし
さすがにそれはダメだと思うが・・
そういう現場確かにあるが

>>688
とか言いながらstringは途中からnull終端を保証したりして、
結局Cの資産を無視できなかったという
2020/01/25(土) 18:53:42.93ID:mY899MyV
もともとc_strはnull終端されてた
それに合法的にnull文字を含むことが出来る時点でnull終端ではない
2020/01/25(土) 20:51:03.23ID:r+ZvoXtB
>>684
いくらなんでもレベル低すぎるぞ
2020/01/25(土) 20:55:09.57ID:0oKBD7Vk
>>684
私のことですね…
new をグローバルオーバーロードしたら、その中では malloc() するしかないですからね…
2020/01/25(土) 21:03:28.44ID:gDStPvND
>>693
> >>684
> 私のことですね…
> new をグローバルオーバーロードしたら、その中では malloc() するしかないですからね…

するしかない?
mallocはどうやって実装されてると思う?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況