C++相談室 part157

■ このスレッドは過去ログ倉庫に格納されています
2021/08/09(月) 10:57:31.60ID:JaaB5Egp
前スレ
C++相談室 part156
https://mevius.5ch.net/test/read.cgi/tech/1621389313/
2021/08/24(火) 22:08:27.39ID:OPjw/0cg
>>160
なるほど!ありがとうございます
181167
垢版 |
2021/08/25(水) 00:50:22.37ID:MXKFEwSS
そういやーまだご存命の方もいらっしゃるんでしたね

>>179
符号付きにしたら2038年問題が2004年問題になってた
人類は間に合わなかった
2021/08/25(水) 07:34:23.44ID:VHSVWUHA
30年も猶予があったのにな
2021/08/25(水) 10:43:26.33ID:M5WZn8fZ
ヒトラー「2036年、人類と云われる者は居なくなっている」
184デフォルトの名無しさん
垢版 |
2021/08/26(木) 16:49:35.75ID:WPRv8+9f
関東大震災だって100年も猶予があっても何もしない國ですし
2021/08/26(木) 21:09:02.54ID:xnTAPql6
色々やってるぞ
庶民を助ける政策をやってないだけで
2021/08/27(金) 17:50:19.96ID:BFKMFKNN
https://twitter.com/cpp_akira/status/1430779310885859330
最近はC++の発表資料を公開すると「Rustでいいじゃん」というコメントがたくさんつくのか…。
Rustへの言及とか一文字も書いてないのに。
普及活動だと思うけど、さすがに嫌がらせチックに見える。

https://twitter.com/moriyoshit/status/1430795812552863744
C++の件に限らず、旧来からある言語の長所短所を理解せずに、
表面的に新言語を推す発言を見ると、
果たして当人は新しい言語の方も理解できているのだろうか、
という疑念をもってしまう...
https://twitter.com/5chan_nel (5ch newer account)
2021/08/27(金) 19:27:10.45ID:wbifwX7a
>>186
Rustはいらんけど、制約を強化してコンパイルエラーを増やしたc++--は欲しいなぁ。

スライシングはすべてコンパイルエラー、ダウンキャストはメンバー関数とフレンド関数のみ使用可能
new deleteはメンバー関数とフレンド関数のみ使用可能(global operator new/deleteは廃止)
といったメモリ周りの制約強化は欲しい。
2021/08/28(土) 14:03:18.97ID:dCOU+NEa
Rustを使って欲しいなら、そう言えばいいのに
人のすることを小馬鹿にするような態度で来るから敵と見られるんだよ
コミュ障にも程がある
2021/08/28(土) 18:35:03.00ID:iJLWqDs6
インテルコンパイラの-fastには-staticが含まれてるけど、なんでスタティックリンクは速いの?
2021/08/28(土) 18:49:01.71ID:Ovc44+68
ライブラリ使うときのロードの手間がなくなるからね
2021/08/28(土) 23:41:54.59ID:V8MBAFoh
スタティックリンクにすると最適化の情報が増えるというのもあると思う。

C/C++ では翻訳単位ごとにコンパイルしてからリンクするという工程を踏むから、
コンパイル時には他の翻訳単位の情報を知らず、他の翻訳単位の情報を利用した
最適化が出来なかった。

今では LTO が当たり前になって、リンク時にあらためてコンパイラに戻して最適化
させる仕組みがあるんだけど、バイナリ自体が別物だとその仕組みを使えない。
2021/08/29(日) 13:13:16.45ID:h29TClHM
std::threadってスタックサイズを指定できないってマジ?
仮想メモリを使えない組み込み用途だとどうすんじゃ……
2021/08/29(日) 13:20:14.34ID:kSqJuAzn
native_handle()関数で環境に応じたスレッドハンドル(linuxならpthread)を取得できるから、スタックサイズを設定するところだけ環境ごとに用意して切り替えればいいよ
2021/08/29(日) 13:28:41.66ID:h29TClHM
Windowsみたいにスレッドハンドルを生成したときはスタックサイズ指定済のとき、みたいな
組み込み用OSがあったらどうすんじゃ……
2021/08/29(日) 13:46:08.60ID:h29TClHM
とわいえμITRONのcre_tsk()は
>cre_tsk でスタック領域を明示しない場合のタスクのスタックや割込みハンドラ/割込みサー
>ビスルーチンのスタックは、OS が用意する「スタック用メモリ」から割り当てられます。
>スタック用メモリのサイズを定義する STKMSZ の標準値は 0 で、この場合、main 関数が使って
>いる処理系のデフォルトのスタック領域(スタックセクション)を、OS のスタック用メモリとし
>ます。この場合の実際のスタックサイズは、リンカでのセクション設定とスタートアップルー
>チンでの初期スタックポインタ値で決まります。
みたいなことが書いてある
C/C++界隈はみんな頭おかしい……
2021/08/29(日) 13:55:46.65ID:h29TClHM
ゴメ勘違いcre_tsk()(IDがOSが自動割り当てのやつはacre_tsk())は
第2引数に与えるT_CTSK構造体でタスクごとにスタックサイズを指定できたわ;;;
なんでstd::threadではできないんじゃ……
2021/08/29(日) 14:18:20.52ID:vSvS+48a
コイツ前スレでも連レスしてたムーブ全く理解してないバカだよね?
NGしたいからトリップつけてください
2021/08/29(日) 14:25:04.60ID:x8xWTwL3
>>192
標準じゃ無理でしょ
全てのスレッドを変えたいならリンカのオプションとかで指摘できる環境もあるけど

boost::thread使って
boost::thread::thread_attribute::set_stack_size()
で設定するがよろし

>>193
native_handle()関数でハンドル取れると言う事はスレッド開始してる
開始済みスレッドのスタックサイズを変えられる環境って聞いたことない
2021/08/29(日) 14:30:52.45ID:AWkeWwKB
>>196
ほんと組み込み屋は馬鹿だな
2021/08/29(日) 16:52:45.64ID:h29TClHM
>>197
完璧な理解をサンプルコード付きで示したやろうが;;;

論点はなんでムーブに置き換えられるケース(明示的にstd::move()したら明らかに効率的なコードになる
において最適化でムーブにならないのか?なのだが高度すぎるのか文盲か故に>>197が付いてこれていないだけ
>>197はブーメラン
2021/08/29(日) 16:54:56.72ID:h29TClHM
もっとも天才の漏れは答えにたどりついたがな
ムーブコンの実装がコピコンの実装より効率的である保証が無い以上、
置き換え可能なケースであってもコピコンからムーブコンへの機械的置き換えは正当化されない
202デフォルトの名無しさん
垢版 |
2021/08/30(月) 14:34:41.72ID:jKIf8Vzq
天才のインフレ
2021/09/01(水) 16:43:13.53ID:Uxp79PtR
Rustみたいにコンパイル時にいちいち参照のチェックするんじゃなくて
C++で最終的に完成したバイナリに対してメモリサニタイザーを一回動かす
ってのではだめな理由ある?
2021/09/01(水) 20:16:57.41ID:dG55Jwur
>>203 動かしたフロー以外のフローについて不安が残るし、サニタイザーの精度がどれほどかという問題もありそう。
2021/09/01(水) 23:35:30.93ID:3mB0e8fG
>>203
ものによって賢さの程度が違うから一概には言えないけど
基本的にはサニタイザは実際に起こった問題を検出するものなので
入力値次第で問題が有ったりなかったりするようなケースを検出できなかったり、
言語仕様上で未定義なものがたまたま問題ないアクセスになってしまうようなケースも
検出できないかもしれない。

問題が起こっていて再現条件が分かっているときに検証するツール、つまりデバッグ用のツール
としてはサニタイザは有用だし、ごく基本的なテストツールとしても使えるけど、
Rust のライフタイムチェックほど網羅的ではない。
2021/09/02(木) 05:18:49.53ID:90/tsZBA
一言でまとめると動的試験てことだな
2021/09/03(金) 09:16:16.79ID:6YHhlfzl
MozillaのFireFoxの場合、わざとクラッカーがセキュリティーホールを見つけ出して
そこを付いてくるから、普段の実行テストでは一度も発見できなかった
メモリーバグが問題になるが、普通のアプリの場合、ユーザーがわざとバグを
付くことはないから、そのようなホールはあまり関係ないと思う。
テスト駆動開発とかアジャイル開発とかも、普段使いで問題が無いかをテスト
することで大部分のバグが無い状態で開発していこうとする考え方。
それでもほとんどのメモリーバグは無い状態になっている。
メモリーバグがあると、普段使い的なテストをしても発覚することが多いから。
昔から言われているメモリーバグの問題点は、再現性が有る場合でも、バグが
ある行とそれが発覚した時期とがずれていることがあるから。
デバッグモードでコンパイラが自動的にチェックするコードを入れていれば、
それはなくなるはず。
Rustはその意味で、経験法則的にFireFoxみたいな特殊なものでは意味があるが
一般アプリでは余り意味が無い。ブラウザの特殊性は、世界中のクラッカーが
セキュリティーホールを探してわざとその穴を付いてくること。一般アプリでは
それがないので、隠れたバグは隠れたままになっていることが多くて、
テストで出てこなかったバグは実際問題的には余り問題となら無い事が多い。
208デフォルトの名無しさん
垢版 |
2021/09/03(金) 09:22:40.61ID:6YHhlfzl
>>207
例えば、ダングリングポインタ(Use After Free)は、ptrがどこかでまだ使用中なのに、
free(ptr)としてしまうこと。しかし、そのfree()をした時点ではアプリはダウン
しないし、ptrに対して読み書きした段階でもまだ発覚せず、ptrが指すメモリー
アドレスを別の目的で使用してしまって、お互いに読み書きがある種の干渉を
起こしてしまって、データがめちゃくちゃになり、それによってどこかで不具合
が生じた時点で発覚する。
なので、バグの根本原因であるfree(ptr)を実行した行がどこかを探し出しにくいと
される。
しかし、このバグの場所とバグが起きた場所のずれは、デバッグビルド時に速度を
落としてチェックすれば本当は防げるはず。
2021/09/03(金) 09:24:49.55ID:6YHhlfzl
>>208
チェックと言っても人間が手で書く必要は無く、コンパイラがチェックコードを
自動生成できるはず。
2021/09/03(金) 10:00:52.25ID:yL2Kwy6+
根拠のない決めつけばかりで気持ち悪い。
2021/09/03(金) 10:16:16.17ID:lmzB7IZ6
>>207
世の中にはテスターという職種の人がいてだな
2021/09/03(金) 10:46:20.27ID:yJUEU9nq
>>207
任意のファイルを読むアプリはファイルのパーサーの脆弱性をついてユーザ権限でコードを実行される可能性がある
どちらかと言えばアプリよりサーバとしてアクセスを受け付けているプログラムの脆弱性をつかれて攻撃コードの実行を許してしまうことが多い
さらに上のような場合でも、アプリやサーバのプログラム自体に脆弱性があるのではなく、使用しているOSのAPI側の実装の脆弱性をつかれる可能性がある

こういうアプリやサーバやOSのコードの脆弱性にMSやGoogleは悩まされている
2021/09/03(金) 11:00:44.84ID:yJUEU9nq
Valgrind と言う動的解析ツールを調べて見るといい
うちはC++のプログラムは基本これを通すことになってる
商用ならもっといいツールもあるかも知れない
そういうのを利用しても充分でないから静的解析するRustが注目されている
2021/09/03(金) 11:27:43.59ID:6Xh4x7Us
商用の静的解析ツール使ってると、正直メモリ関係のバグなんてありえないと思えるくらいいろいろ見つけてくれるよ
2021/09/03(金) 11:44:23.16ID:9y+1HwQb
コンパイル時間に糸目を付けなければ、静的解析はもっと出来る。
2021/09/03(金) 11:47:10.63ID:lmzB7IZ6
> メモリ関係のバグなんてありえないと思える

lintの副作用がモロに出てるなw
2021/09/03(金) 15:20:21.54ID:MvVz2a9W
言うまでもない事だが完璧なメモリチェッカーは存在し得ない
停止問題と同値だからな
2021/09/03(金) 15:50:45.07ID:6Xh4x7Us
完璧無理っておまえの毛髪の量がプログラム停止に与える影響が読めないとかそういう話だろ?
限定的な範囲で正しけりゃ十分だよ
2021/09/03(金) 16:54:40.55ID:lmzB7IZ6
ゴールポストは動かしちゃダメだよ
2021/09/03(金) 17:38:29.50ID:6Xh4x7Us
無限遠のゴールを設定するのはアホだべ
2021/09/03(金) 17:51:18.36ID:xmwLNRYX
スクリプト言語も普通にクラッシュすることあるから
2021/09/03(金) 17:52:37.20ID:xmwLNRYX
OSのコアダンプ出力とリブートに救われる手のひらの孫悟空
2021/09/03(金) 18:28:35.67ID:iCLUv6gH
rustでもメモリアロケーション失敗するとパニックになる、てリーナスが突っ込んでいたろ。
c++の場合はどうなんのかな。
2021/09/03(金) 20:13:28.89ID:USKNPKWa
CoverityとVectorCASTは使ったことあるけど検知レベル最高にしても見逃すリークや二重フリー, ダングリングはそれなりにある (そもそもコードの構造が悪い場合も多いが)
検知レベル上げ過ぎると逆にFalse Positiveも増えるし
2021/09/04(土) 07:59:49.00ID:kFVsNuY8
無限遠のゴールポストを動かすって
こいつ文系か?
2021/09/04(土) 08:08:40.61ID:N/QuNfWR
まあ見つからないのは間違いなく書き方が悪いよな
2021/09/04(土) 19:04:52.86ID:7+pvijvQ
∞の概念が理解できるならそいつはもう文系ではあるまい
2021/09/04(土) 19:11:19.50ID:ICKB9ww0
ε-N論法
229デフォルトの名無しさん
垢版 |
2021/09/04(土) 22:28:42.31ID:mLTAxmCN
超久しぶりにC++の参考書 買った。
いまってC++20までいってるんでしょ?

時代遅れもいいところだから勉強しようと思ってw


ただ読む気がおきない。
「pythonでいいか」って思いが・・・ww
2021/09/04(土) 23:52:57.58
>>223
https://tabesugi.net/memo/2009/1a.html
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。

C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:

- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)

- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。

言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
2021/09/05(日) 00:05:05.82ID:yIsM5ONG
バカが使いこなせる言語ではないからな
2021/09/05(日) 00:27:52.33ID:eMsTCIh+
linusに言われると返す言葉もないが、その後の文脈にある

『もし C++ で書かれた VCS が欲しいのなら、Monotone を見てみるといい。
ほんとに。連中は「本物のデータベース」を使っているよ。
「素敵なオブジェクト指向ライブラリ」も使ってる。「ナイスな C++ の抽象化」も
使ってる。そして率直なことろ、一部の情報系の人間が喜びそうな
これらすべての設計上の決定のために、できてきた結果はゲロゲロで
保守不可能なカオスだ。

でもあんたはきっと git よりも気に入るだろう。保証するよ。』

な感じでC++を気に入って、夢を見ていたいんだろうね。
2021/09/05(日) 00:53:47.56ID:66hkUr5p
「オレはC++を使いこなせている」と思い込む素人を生温かく見守るスレはここですね
2021/09/05(日) 01:42:41.34ID:eMsTCIh+
>>223
https://lkml.org/lkml/2021/4/14/1099
コレのことだと思うけど、どういうケースを想定しているの?
2021/09/05(日) 06:00:11.76ID:fsFc+8nQ
昔、バカでも使える言語でプログラマ人口増やしましょうてなことやってたな
BASICじゃないぞ、あれは初心者用で、バカ用じゃない

計算を数式で書くのは理系だけだから
英文で書けるようにして文系でも使えるようにしようという試みがあった

で、狙いどおり本当にバカプログラマを量産できた
それでいいことあったか?

C++はアレの逆をいっているわけだ
236デフォルトの名無しさん
垢版 |
2021/09/05(日) 06:45:24.37ID:ClPlKiJv
Qtを使ってるから、C++一択だな。
2021/09/05(日) 12:24:02.01ID:cBh+EO/A
namespaceと多態性はCだけではやりにくい
2021/09/05(日) 12:47:17.91ID:0Cj96kG7
静的なディスパッチの充実がCに必要なのではないか
2021/09/05(日) 14:17:57.22ID:cBh+EO/A
>>234
Linuxはモノリシックカーネルなので動的メモリ確保を伴うような軟弱な
モジュールもカーネルのうちに入ってしまっているからメモリ不足ぐらいで
パニくられると手の打ちようがないから困るという話なんじゃないの(適当

OSはリソース管理を放り投げて停止することは許されないから
伝統的なやり方では起動時に非常用のメモリブロックをアロケートしておいて
メモリが枯渇したら非常用のメモリブロックを使うみたいな手段がとられる(と思う
がパニックされたらそこまで行きつかない

※ 個人の感想です
2021/09/05(日) 14:38:48.42ID:eMsTCIh+
>>239
具体的に何かのケースを想定して言ってるわけじゃないのか。
ぶっちゃけOSをC++で書くならカーネルでnew/malloc/mmapとか使う実装はしないだろうし、処理系が使うランタイムにも依存するけど基本その辺はカスタマイズできるようになってると思う。
rustでもそんな感じで処理系次第って話だと思う。
241デフォルトの名無しさん
垢版 |
2021/09/05(日) 14:44:00.68ID:LgQhIBwq
>>230
馬鹿除けのために C++ じゃなくてあえて C を使うのは良いね
https://www.youtube.com/watch?v=TkyGdUg_XlA
2021/09/05(日) 17:28:18.83
>>241
>>230 の類の話は昔からいわれていたもので、これも有名ですね
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html

インタビューア(以下「I」): あなたがソフトウェアデザインの世界を一変させてから何年にもなる。振り返ってみて、感想は。
Stroustrup(以下「S」): 実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが C 言語を使っていたけど、問題はみんな結構うまくコーディングしていたことだった。
大学も C 言語を教えるのがうまくなっていたしね。驚異的な割合で有能な――「有能」という言葉は強調しておきたい――卒業生を量産していた。それが問題の原因だったんだ

S: ある日、オフィスにいたときに、ある策略を思いついたんだ。バランスを少し回復させる策略をね。「プログラマが余るなんてことが絶対にありえないくらい、複雑でおぼえにくい言語があったらどうなるかな」ってね。
実は、この考えの一部は X10――例の X Window の――から頂いたんだ。あれはひどいグラフィックシステムでね、Sun 3/60とかでないと動かなかった。
ばかばかしいくらい複雑な構文規則とか、わかりにくい関数とか、疑似オブジェクト指向的な構造とか、僕がほしいと思う要素は全部揃っていたんだよね。
今でさえ、生の X Window コードを書く人間なんていない。正気を保つには Motif を使うしかないんだ。

S: もうかなり時間がたったしね、C++ が時間の無駄だということにはほとんどの人が気がついたとは思うけど、でも当初予想していたよりはずいぶん時間がかかったな。
I: 具体的に何をどうやったのかな。
S: 最初はほんの冗談のつもりでね、みんながあの本を真に受けるとは思ってもみなかったんだ。脳みそが半分でもあれば、オブジェクト指向プログラミングが非直感的で、非論理的で、非効率なことくらいはわかるよね。
I: え?
S: それに「コードの再利用性」ときたら…。どこかの会社がコードを再利用したなんて話を聞いたことがある?

I: うん、でも C++ は基本的にはしっかりした言語だと思う。
S: それ、本気で信じてるね。実際の C++ プロジェクトの経験はある? どうなるかって言うとね、まず第一に、いろいろワナを仕掛けてあるから、よほど小規模なプロジェクト以外は一発では動かないようになっているんだ。
たとえば演算子のオーバーロードがそうだ。たいていの場合、プロジェクトの終わり頃にはほとんどのモジュールで演算子をオーバーロードしている。
プログラマの連中が、トレーニングコースで教わったとおりにやらなくちゃいけないと思うからだ。つまり、1つの演算子の持つ意味が、モジュールによってまったく異なることになる。
モジュールの数が100かそこらあるときに、これをまとめあげようとしたらどうなると思う? データ隠蔽もあるね。モジュール間の連繋にどこかの会社が苦労しているなんて話を聞くと、笑いを抑えられないときがあるよ。
「Synergistic」という言葉は、プロジェクト管理者の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。
2021/09/05(日) 17:47:40.38ID:eWmYSwWp
>>242
とっくに否定済みのデマを貼るな
http://www.stroustrup.com/bs_faq.html#IEEE
2021/09/05(日) 18:05:24.16ID:Lkm6/1Sl
https://ideone.com/fHH1N4
これが、シングルトンとして抜けている理由を教えて下し亜。
コードのストックにするために書いたのですが、そもそもシングルトンってなんでしたっけ?
2021/09/05(日) 18:06:53.16
>>243
誰が書いたかなどどうでもよく、その内容についてはどう思いますか?
2021/09/05(日) 18:10:26.36ID:vh6AiUnJ
>>244
関数テンプレートが結果的に引数の数が違う関数として展開される。
引数の数の違いが結果の違い。
2021/09/05(日) 18:23:29.28ID:cBh+EO/A
>static std::shared_ptr<T> O = std::make_shared<T>(A...);
の部分って、Singleton()の初回呼び出しが複数のスレッドから同時に起こってもき
ちんと排他してくれるんでした
っけ

また排他してくれるとしても最速(そのアーキテクチャ(マルチコアかもしれない)で最も適切)
であることを気体していいんでしたっけ……
つまり生成に成功した後は排他不要なわけで、無駄にロックを取りに行きたくない……
2021/09/05(日) 18:24:18.83ID:yIsM5ONG
>>242
おまえホント頭悪いな
2021/09/05(日) 18:27:31.03ID:cBh+EO/A
みたいな配慮がシングルトンにしたとたんに必要になる
メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
2021/09/05(日) 18:28:54.12ID:0Cj96kG7
>>247
呼ばれたところで最後の奴が勝てば問題ないのでは
2021/09/05(日) 18:47:53.68ID:cBh+EO/A
>>250
ある
>static std::shared_ptr<T> O = std::make_shared<T>(A...);
全体が排他されないとしたら、Oの生成関数(初期化式「O=」の右辺)が複数回、
それも同期的に繰り返し呼ばれるのではなく、非同期的に再入される形で呼ばれかねない
生成関数の中でリソース確保するとしたら先の呼び出しで確保したリソースの
ハンドルがdunglingにならないように配慮が必要になる
非同期的再入ということは、Oが生成→破棄→生成→破棄、にならず、
生成→生成→破棄→破棄になりかねないから、デストラクタをちゃんと書いたらリークしないとか
そういう認識で当たったらバグる
問題山積や

メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
2021/09/05(日) 18:50:05.34ID:nyuo1Vq1
>>245
お前の質問なんかどうでもいいからデマを貼るな
2021/09/05(日) 19:08:04.86ID:UYU4AxET
>>247 https://timsong-cpp.github.io/cppwp/n4861/stmt.dcl#4
2021/09/05(日) 19:10:36.36ID:2jP3+tuQ
>>246を踏まえるとこんな感じか
関数テンプレートだけで済ます方法はあるのかな?

https://ideone.com/kmIimz
2021/09/05(日) 21:38:19.52
>>248
はい、頭も性格も悪いと思います、しかし >>242 の中のどういうところが悪いとお考えになったのか教えていただくと嬉しいです!!
2021/09/05(日) 22:21:15.62ID:TAzC3d8r
>>255
そもそも、C++の生みの親で、それに関する書籍を出してその中でC++を
良い言語と自負して(それ以上の言語が出来ないというような主張も幾度もして)
解説し、まだ推進しようとしている人が、C++を徹底的に卑下するかどうかを
疑問に思ってないことも頭が悪いと思われる原因の一つ。
2021/09/05(日) 22:29:24.50ID:15q7gB85
実際、C++は、特に初期の頃はCより全面的に優れていると誰でも思えるような
物であって、ちゃんと世界的に認められて広まっていたのに、その部分まで
全否定するようなことをインタビューで答えるわけがない。
その後に追加されて機能は人により評価が分かれて全面的に優れているとは
思えるようなものではなくなっていた。
だから、C++11は、好きな人も居れば嫌いな人も居る。C++98より全面的に
優れていると言えるかどうかは人により評価が分かれるので、好みにより
文壇の様なものが生じている。
2021/09/05(日) 22:30:49.67ID:cBh+EO/A
>>254
ひ、日本語でおk、、、

>If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.85
>If control re-enters the declaration recursively while the variable is being initialized, the behavior is undefined.
はどう読めばいいの?
結局concurrentlyにre-enterされるときはbehavior is undefinedとしか読めなさげ

>>254
以上の状況なので>>244の糞コードは直しても仕方が無い
2021/09/05(日) 22:36:38.84ID:66hkUr5p
メモリを自動解放するfinally機能さえあればCでも大丈夫とは思う
2021/09/05(日) 22:50:33.49ID:yIsM5ONG
https://imgur.com/aX1iNMp.jpg
2021/09/05(日) 22:52:01.95ID:cBh+EO/A
とオモタがcontrol enters the declaration concurrently のときは初期化のcompletionまでshall waitで、
ただしrecursivelyだとイカン(未定義動作)と書いてあるのか……
つまりSingleton()関数内の初期化式「O=」の右辺がSingleton()を呼び出す場合か

まあ確かにWindousみたいに特殊な仕様のクリティカルセクションでもない限りデッドロックしそう
2021/09/05(日) 23:09:38.17ID:eTOvJaZ9
>>251
そうか
まあ仕様的にはスレッドセーフだわ
関係ないけど参照したグローバル変数に値が入っとらんで困ったことがあった
2021/09/06(月) 00:30:26.82ID:62gS+LUW
>>258
なんかスレッド安全性の問題にしたいようだけど、
そもそも>>244の第一の問題点は2番目のSingletonの呼び出しだけ別のオブジェクトを指してしまっている点だよ
stdoutの2行目だけ0になってるだろ?
その原因の説明が>>246というわけだ

すべての関数・クラスを最初からスレッドセーフな設計にしないといけないわけじゃない
2021/09/06(月) 04:31:29.75ID:HRRCwLhx
>>263
>>258じゃないし、よく分からないけど
https://ideone.com/69FQhL
ではダメなの?
265デフォルトの名無しさん
垢版 |
2021/09/06(月) 04:31:59.38ID:G2BRvA3h
ビャーネ・ストロヴストルップその人のインタビューだとは私も考えてませんよ、これはブラックジョークというべきでしょう、まあC++er が気を悪くする理由は理解できますが
それに私も GNU Multi-Precision Library を使うときはC++のラッパの方を使います。C インターフェースの方は使い難くって使い難くって、これはもう罰ゲームですね‥‥
だから演算子のオーバーロードも控えめに使えば有用という立場です、紹介することと賛成することとは別だと思います
https://mevius.5ch.net/test/read.cgi/tech/1434079972/84
2021/09/06(月) 04:40:03.34
テステス
2021/09/06(月) 07:17:56.24ID:7SReNX2q
>>263
スレッドセーフでなくともよいシングルトンとか
>メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
で良くね?

>>264
>>263じゃないが非アトミックな操作(初回か否かチェックして初回なら初期化する)
であることが明示される分その書き方の方がマシ
必要なら排他する、不要ならしないという判断ができるから
>すべての関数・クラスを最初からスレッドセーフな設計にしないといけないわけじゃない (>>263
という願いも叶うYO!
2021/09/06(月) 08:08:09.17ID:62gS+LUW
>>264
確かに普通こんな感じだな
テンプレート別々にすることだけで頭止まってた

>>267
そうだな
書いてはみたがC++でシングルトン使う意味は無いと思う
あれはグローバル変数の無いJavaでグローバル変数を使うためのハックだとか聞いたし
じゃあもう普通にグローバル変数使えばよくね、と
2021/09/06(月) 08:45:11.58ID:3/UK3SOv
グローバル変数と同じなのでだめだよな
普通に動的に用意して渡せばよろしい
2021/09/06(月) 08:48:23.63ID:HRRCwLhx
ログとかアプリの現行設定ファイルとかはSingletonっぽく実装するけどなぁ・・・
インスタンス生成が遅いものはただのグローバルにしたら起動が遅くなるし
2021/09/06(月) 09:20:13.64ID:FistWoaj
>>268
最初のデザパタ本であるGOF本はc++とsmalltalkで書かれてるんで、javaは関係ないよ
2021/09/06(月) 10:32:20.65ID:d5h9Y6Qi
シングルトンはスレッドセーフが実現できれば問題ないでしょ
2021/09/06(月) 12:01:04.36ID:KKMECnvR
>>255 >>265
これは「権威に訴える論証」を悪用した主張であり、議論の対象としてはいけない類のもの。
もし真面目に議論したいのなら、少なくともStroustrupの名前は消して内容だけに修正しなくてはならない。

本人も否定しているのに訂正もしないようなフェイク記事は邪悪。それに対してコメントを求めるのは正気を疑う。
2021/09/06(月) 12:06:51.69ID:86SPG0/G
その昔、こんなクラス作ってたな
class WinMainArguments
{
public:
static HINSTANCE hInstance;
static HINSTANCE hPrevious;
static LPSTR lpszCmdLine;
static int nCmdShow;
};
275デフォルトの名無しさん
垢版 |
2021/09/06(月) 15:04:51.66ID:DsY+3+kX
>>265
ブラックジョークは大半の人が聴いた瞬間にジョークだと判るから成立する
麦藁禿のあの名文はまさにそれ

だまされてるのは事情を知らない若い人かも知れんな
2021/09/06(月) 15:52:40.84ID:86SPG0/G
>>265
GMPについて同意見
2021/09/06(月) 16:43:26.89ID:akmYwjNo
>>274
ネームスペースつかえよバカww
2021/09/06(月) 16:51:37.50ID:5nha9zO6
>>277
初期のc++には名前空間が無くてなぁ。
標準化する前だから良く知らんが。
2021/09/06(月) 17:50:02.90ID:xrgLRigr
その初期のC++ってもしかしてEC++とかいうパチモンじゃないですかね
2021/09/06(月) 17:51:19.11ID:ugWeBDlD
今更バイエルの運指について議論してるような雑魚に構うなよ
C++もピアノも、憧れだけあって実力がまるでないバカ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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