C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part145
http://mevius.5ch.net/test/read.cgi/tech/1568362404/
このスレもよろしくね。
【初心者歓迎】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/ (日本語)
探検
C++相談室 part146
■ このスレッドは過去ログ倉庫に格納されています
2019/11/07(木) 11:35:36.76ID:4wggfTwe
740デフォルトの名無しさん
2019/12/09(月) 02:33:36.15ID:ExBOPGUm そうなんだ。
741デフォルトの名無しさん
2019/12/09(月) 02:41:32.17ID:ExBOPGUm >>739
なかの人はID付かないのかなって。
なかの人はID付かないのかなって。
742デフォルトの名無しさん
2019/12/09(月) 08:06:32.09ID:V5HcCSm8 >>735
C++ の規格が引用してる C の規格じゃないかな。
質問のつもりで書いてるなら、あまりに態度が悪い気がするし、
「その投稿の内容は間違ってる」と主張したいなら、
もっと直接的・具体的に間違ってるという根拠を示すべきだと思うよ。
C++ の規格が引用してる C の規格じゃないかな。
質問のつもりで書いてるなら、あまりに態度が悪い気がするし、
「その投稿の内容は間違ってる」と主張したいなら、
もっと直接的・具体的に間違ってるという根拠を示すべきだと思うよ。
743デフォルトの名無しさん
2019/12/09(月) 09:58:16.97ID:CUCDgsHX >>736
ありがとう。
ありがとう。
744デフォルトの名無しさん
2019/12/09(月) 17:54:07.48ID:c5eP1gUS745720
2019/12/09(月) 18:35:46.39ID:ZGVF76Fo 自己レスです
Visual Studio 16.4では
Intel Parallel Studio 2019 u5は動かないようです。
16.3に戻せないし
どーしよー
https://software.intel.com/en-us/forums/intel-c-compiler/topic/840467
Visual Studio 16.4では
Intel Parallel Studio 2019 u5は動かないようです。
16.3に戻せないし
どーしよー
https://software.intel.com/en-us/forums/intel-c-compiler/topic/840467
746デフォルトの名無しさん
2019/12/09(月) 19:45:24.14ID:ExBOPGUm POSIXには明確にCロケールの定義が書かれていた。
747デフォルトの名無しさん
2019/12/09(月) 20:19:32.09ID:B3OID8x5748デフォルトの名無しさん
2019/12/09(月) 21:02:54.27ID:HdhKIpY6 昔からVSはそんなもんだ。
てかc++コンパイラなんて全部そんなもんだ。
てかc++コンパイラなんて全部そんなもんだ。
749デフォルトの名無しさん
2019/12/09(月) 21:45:50.54ID:P+A0aO3e >>745
リンク先に回避策があるって書いてあるやん
リンク先に回避策があるって書いてあるやん
750デフォルトの名無しさん
2019/12/09(月) 21:53:17.84ID:G+eF5KMH >>746
それはCの規格と必ずしもイコールではないがな。
それはCの規格と必ずしもイコールではないがな。
751デフォルトの名無しさん
2019/12/09(月) 22:32:03.14ID:ExBOPGUm どういうことですか。
752デフォルトの名無しさん
2019/12/09(月) 23:24:28.11ID:qFr59Y2H POSIX には ISO C には無い追加の定めがあり、したがって
POSIX にある定めは必ずしも ISO C 一般に言えることではないということです。
POSIX にある定めは必ずしも ISO C 一般に言えることではないということです。
753デフォルトの名無しさん
2019/12/09(月) 23:30:20.36ID:c5Uv/Cv5 わかったはもうこれからはstd::isspace()とstd::iscntrl()を使うは
754デフォルトの名無しさん
2019/12/09(月) 23:43:16.79ID:ExBOPGUm メンバ変数にstd::listを使うと移動コンストラクタがnoexceptに出来ないのですが。
こんな時はどうするのでしょう。
こんな時はどうするのでしょう。
755デフォルトの名無しさん
2019/12/09(月) 23:58:06.53ID:aHmkn8DW メンバのstd::listをポインタにする
756デフォルトの名無しさん
2019/12/09(月) 23:59:06.89ID:qFr59Y2H >>754
まず何を見て「出来ない」と言っているのかを明らかにします。
まず何を見て「出来ない」と言っているのかを明らかにします。
757デフォルトの名無しさん
2019/12/10(火) 00:04:16.84ID:KeuWZv5z758デフォルトの名無しさん
2019/12/10(火) 00:06:34.29ID:KeuWZv5z std::swapの特殊化がnoexceptです。
これを使いますか。
これを使いますか。
759デフォルトの名無しさん
2019/12/10(火) 00:08:47.32ID:KeuWZv5z 引数無しのコンストラクタがnoexceptじゃないから無理でした。
760デフォルトの名無しさん
2019/12/10(火) 00:37:17.09ID:OASxW0Hh そもそも noexcept にする必要性が不明だし、呼び出してる関数が
全部 noexcept じゃなくても std::list 実装を限定してよかったり、特定実装での
bad_alloc =即死の不都合が必要性と釣り合うなら noexcept にすることはできるし、
最大限の移植性も bad_alloc の通知も noexcept もすべて本当に必要なら
>755 でポインタって答えも出てるのに。
全部 noexcept じゃなくても std::list 実装を限定してよかったり、特定実装での
bad_alloc =即死の不都合が必要性と釣り合うなら noexcept にすることはできるし、
最大限の移植性も bad_alloc の通知も noexcept もすべて本当に必要なら
>755 でポインタって答えも出てるのに。
761デフォルトの名無しさん
2019/12/10(火) 00:41:00.11ID:2YzAsKi1 自動でnoexceptに成らないなら、自分で望みのnoexceptの定義すりゃ良いだろうに
部品が例外投げるなら内部でcatchして適切に処理すればいい
部品が例外投げるなら内部でcatchして適切に処理すればいい
762デフォルトの名無しさん
2019/12/10(火) 00:43:28.28ID:KeuWZv5z763デフォルトの名無しさん
2019/12/10(火) 07:32:12.43ID:Xhvd8FYl >>761
正論
正論
764デフォルトの名無しさん
2019/12/10(火) 19:05:35.05ID:yM6al2d7 途中でcコード通るとか何らかの理由があるんだろう。
765デフォルトの名無しさん
2019/12/11(水) 13:14:22.35ID:KfdgnhFC ある一つの変数に対してstd::threadで作成したプロセスは値を更新し続けて、メイン関数の方では値を読み続ける場合は排他処理する必要はありませんか?
メイン関数の方は必要なときだけ値が読めればいいので読みこぼしは無視していいです
メイン関数の方は必要なときだけ値が読めればいいので読みこぼしは無視していいです
766デフォルトの名無しさん
2019/12/11(水) 13:19:53.65ID:iOg65oSz >>765
変数が std::atomic<T> でなければ排他制御の必要があります。
変数が std::atomic<T> でなければ排他制御の必要があります。
767デフォルトの名無しさん
2019/12/11(水) 13:21:20.19ID:m9WEF2SZ768デフォルトの名無しさん
2019/12/11(水) 13:23:21.98ID:/1t9T7AP 基本型かつ確実にレジスタでなくメモリに書き出されているならそうだね
std::atomcを使うのが無難
その条件ならmemory_order_relaxedを指定すればバリアのオーバーヘッドは避けられる
面倒だけどね
std::atomcを使うのが無難
その条件ならmemory_order_relaxedを指定すればバリアのオーバーヘッドは避けられる
面倒だけどね
769デフォルトの名無しさん
2019/12/11(水) 13:35:45.33ID:IATqHbi6 質問者じゃないけど
読みこぼしとかタイミングによるズレが問題ないとしても排他制御なしに読み書きする時点で未定義動作だからNG
って認識でおk?
読みこぼしとかタイミングによるズレが問題ないとしても排他制御なしに読み書きする時点で未定義動作だからNG
って認識でおk?
770デフォルトの名無しさん
2019/12/11(水) 13:46:34.56ID:iOg65oSz はい。
https://timsong-cpp.github.io/cppwp/n4659/intro.multithread#intro.races-20
> The execution of a program contains a data race if it contains two
> potentially concurrent conflicting actions, at least one of which is
> not atomic, and neither happens before the other, except for the
> special case for signal handlers described below. Any such data race
> results in undefined behavior.
https://timsong-cpp.github.io/cppwp/n4659/intro.multithread#intro.races-20
> The execution of a program contains a data race if it contains two
> potentially concurrent conflicting actions, at least one of which is
> not atomic, and neither happens before the other, except for the
> special case for signal handlers described below. Any such data race
> results in undefined behavior.
771デフォルトの名無しさん
2019/12/11(水) 14:00:16.36ID:/1t9T7AP 言語仕様はそうだろうけど
x86なら実際は多くの場合バリア不要だったりするから
最終的にどういうinstructionになっているのか知っておくと理解が深まる
x86なら実際は多くの場合バリア不要だったりするから
最終的にどういうinstructionになっているのか知っておくと理解が深まる
772デフォルトの名無しさん
2019/12/11(水) 15:24:29.91ID:nkoUZIKM x86系CPUで普通のメモリへの読み書きで順番が入れ替わる可能性があるのは write => read だけ
これ以外だったり同期が必要なければ
排他制御は不要
もちろん、
一連のデータリードでデータの一貫性が必要であれば一貫性確認の仕組みなり排他制御なりは当然必要だし、
コンパイラが読み書きを省略する可能性のあるコードであれば
volatileを付けるなど、省略を防ぐ必要はある
ymmレジスタを使えばアトミックな読み書きが出来るので
256bit以内なら一貫性も保てる
マルチコアARMの場合は
DMB命令を入れておけば確実
パフォーマンスに問題が無い箇所であれば、
移植性の為にも、素直にC++の排他制御を入れておこう!
これ以外だったり同期が必要なければ
排他制御は不要
もちろん、
一連のデータリードでデータの一貫性が必要であれば一貫性確認の仕組みなり排他制御なりは当然必要だし、
コンパイラが読み書きを省略する可能性のあるコードであれば
volatileを付けるなど、省略を防ぐ必要はある
ymmレジスタを使えばアトミックな読み書きが出来るので
256bit以内なら一貫性も保てる
マルチコアARMの場合は
DMB命令を入れておけば確実
パフォーマンスに問題が無い箇所であれば、
移植性の為にも、素直にC++の排他制御を入れておこう!
773デフォルトの名無しさん
2019/12/11(水) 15:42:23.89ID:ax9A/ZTc お前らRustに移行とか考えたりするの?
774デフォルトの名無しさん
2019/12/11(水) 17:37:57.91ID:bM/oaPHs >>773
個人的には絶対に移行したくないと思っている。
個人的には絶対に移行したくないと思っている。
775デフォルトの名無しさん
2019/12/11(水) 17:42:08.10ID:/1t9T7AP どっちもやったらええがな
776デフォルトの名無しさん
2019/12/11(水) 18:13:18.74ID:bM/oaPHs >>771
質問されたような簡単な場合であっても、少なくとも、80386系CPUでも、
物理CPUを2つ積んでいるようなマシンだと、色々な配慮が必要。
一つの理由は、CPUキャッシュが外部メモリに反映されていない場合が
あるため。
もう一つは、値の変化のタイミングがコードに書いた通りで無い事があり、
僅かにタイミングがずれることで、「すれ違い」現象の様なことが
おきることがある。これが起きると、変数の値をフラグ的に利用して
厳密に何かをやりたい場合に非常に致命的な問題を生じてしまうことがある。
これを避けるには、80386の設計者は、XOR交換命令を使うことを想定
していたらしい。
2つのスレッドでデータをやり取りする場合には色々と注意が必要で、
普通はデータが準備できたかどうかをCreateEvent(),SetEvent(),
WaitForSingleEvent()などで待機して処理するのが基本。
質問されたような簡単な場合であっても、少なくとも、80386系CPUでも、
物理CPUを2つ積んでいるようなマシンだと、色々な配慮が必要。
一つの理由は、CPUキャッシュが外部メモリに反映されていない場合が
あるため。
もう一つは、値の変化のタイミングがコードに書いた通りで無い事があり、
僅かにタイミングがずれることで、「すれ違い」現象の様なことが
おきることがある。これが起きると、変数の値をフラグ的に利用して
厳密に何かをやりたい場合に非常に致命的な問題を生じてしまうことがある。
これを避けるには、80386の設計者は、XOR交換命令を使うことを想定
していたらしい。
2つのスレッドでデータをやり取りする場合には色々と注意が必要で、
普通はデータが準備できたかどうかをCreateEvent(),SetEvent(),
WaitForSingleEvent()などで待機して処理するのが基本。
777デフォルトの名無しさん
2019/12/11(水) 18:17:08.59ID:bM/oaPHs >>776
スマン。XOR交換命令ではなく、xchg命令だった。
スマン。XOR交換命令ではなく、xchg命令だった。
778デフォルトの名無しさん
2019/12/11(水) 18:20:46.73ID:NtLrnXCf goよりかはrustの方が全然マシやと思うぞ
最近go案件振られること多いけどC言語触ってるみたいで好きになれんわ〜
最近go案件振られること多いけどC言語触ってるみたいで好きになれんわ〜
779デフォルトの名無しさん
2019/12/11(水) 18:30:30.06ID:/1t9T7AP >>776
xchgはsequential consistencyが必要な場合だよ
今回のように単にatomicにread/writeできればいいだけなら不要
お前さんも含めてよくわからん人は使わないのは正解
xchgはsequential consistencyが必要な場合だよ
今回のように単にatomicにread/writeできればいいだけなら不要
お前さんも含めてよくわからん人は使わないのは正解
780デフォルトの名無しさん
2019/12/11(水) 18:36:33.88ID:bM/oaPHs781デフォルトの名無しさん
2019/12/11(水) 18:38:56.23ID:bM/oaPHs MFENCE
PREFETCH
MOVNTDQA
LFENCE(?)
XCHG
LOCK prefix
WC Memory
↑沢山あるけど、よく分からない。
xchgもちゃんと理解できてない。
PREFETCH
MOVNTDQA
LFENCE(?)
XCHG
LOCK prefix
WC Memory
↑沢山あるけど、よく分からない。
xchgもちゃんと理解できてない。
782デフォルトの名無しさん
2019/12/11(水) 18:39:59.12ID:bM/oaPHs MFENCE, LFENCE, SFENCE。
服のサイズみたいだ。分からん。
服のサイズみたいだ。分からん。
783デフォルトの名無しさん
2019/12/11(水) 18:46:12.74ID:bM/oaPHs >>779
xchgは、2つ以上のCPUが1つの事柄に関する lock を同時に獲得しようとした時に
1 CPU だけが lock を獲得できて、他はすべて獲得できないようにするための
ためのようですね。今回とは余り関係ないようです。
xchgは、2つ以上のCPUが1つの事柄に関する lock を同時に獲得しようとした時に
1 CPU だけが lock を獲得できて、他はすべて獲得できないようにするための
ためのようですね。今回とは余り関係ないようです。
784デフォルトの名無しさん
2019/12/11(水) 21:50:49.53ID:10jfhd7e >>777
XORを使った交換テクニックがあったのを思い出した
XORを使った交換テクニックがあったのを思い出した
785デフォルトの名無しさん
2019/12/12(木) 00:31:42.87ID:n5d2iAqE >>765
その場合でも排他制御は基本的には必要。
たとえば読み込んで範囲チェックをした後に値が変わってしまったらまずいでしょ。
別メモリにコピーを取っていてから処理しているつもりでも、最適化が気を利かして削除しちゃうこともあるだろうしね。
その場合でも排他制御は基本的には必要。
たとえば読み込んで範囲チェックをした後に値が変わってしまったらまずいでしょ。
別メモリにコピーを取っていてから処理しているつもりでも、最適化が気を利かして削除しちゃうこともあるだろうしね。
786デフォルトの名無しさん
2019/12/12(木) 00:36:46.28ID:n5d2iAqE787デフォルトの名無しさん
2019/12/12(木) 00:54:16.98ID:UvCIGzud AVXを使えば256bitを1命令で
AVX512を使えば512bitを1命令で
読み書き可能
AVX512を使えば512bitを1命令で
読み書き可能
788デフォルトの名無しさん
2019/12/12(木) 01:00:12.24ID:UvCIGzud x86系だとCMPXCHG命令
ARMだとLL, AC命令
がデータの一貫性確認に使える
ARMだとLL, AC命令
がデータの一貫性確認に使える
789デフォルトの名無しさん
2019/12/12(木) 03:03:25.42ID:hmkgwwLY とんちプログラミングはもう流行らなさそう。
790デフォルトの名無しさん
2019/12/12(木) 03:28:17.88ID:J/GuvI9A とんちプログラミングwww
791デフォルトの名無しさん
2019/12/12(木) 03:55:57.93ID:g+q4RhTJ > これを避けるには、80386の設計者は、XOR交換命令を使うことを想定
> していたらしい。
当たり前じゃね?アトミックな命令を使うのは基本だと思うが
> していたらしい。
当たり前じゃね?アトミックな命令を使うのは基本だと思うが
792デフォルトの名無しさん
2019/12/12(木) 07:30:46.73ID:UvCIGzud XOR
793デフォルトの名無しさん
2019/12/12(木) 07:43:20.40ID:Vt8W+oPZ xor rax,rbx
xor rbx,rax
xor rax,rbx
これでswap rax,rbx相当ってことね
xor rbx,rax
xor rax,rbx
これでswap rax,rbx相当ってことね
794デフォルトの名無しさん
2019/12/12(木) 07:53:00.21ID:UvCIGzud795デフォルトの名無しさん
2019/12/12(木) 10:43:59.85ID:r0VN1UlG condition_variableで待機しているスレッドがない状態でnotify_allしたときの動作ってどうなりますか?
796デフォルトの名無しさん
2019/12/12(木) 10:56:19.34ID:WJA8YZFG 時空が逆流し、針の先から悪魔が生まれる
797デフォルトの名無しさん
2019/12/12(木) 11:06:56.29ID:a67Hqgb2 jsに対するTypeScriptみたいな感じで
C++に対するRustっていう認識は間違ってるが
それならC++に対するそれは何が適当なんかある?
C++に対するRustっていう認識は間違ってるが
それならC++に対するそれは何が適当なんかある?
798デフォルトの名無しさん
2019/12/12(木) 11:10:12.33ID:Vt8W+oPZ allに該当する要素の数が0なのを特別視する必要はなさそう
799デフォルトの名無しさん
2019/12/12(木) 11:21:14.68ID:NrsugUJv 非同期な操作やしその瞬間何も起きんなら単にスルーするだけ
800デフォルトの名無しさん
2019/12/12(木) 12:01:38.93ID:Z8SHCwDj >>797
無い。
無い。
801デフォルトの名無しさん
2019/12/12(木) 12:26:43.11ID:gL/Y8Ccu >>797
Managed C++とかC++/CLIとか
Managed C++とかC++/CLIとか
802デフォルトの名無しさん
2019/12/12(木) 13:04:34.98ID:Z8SHCwDj >>801
それだと余計に変になっているので、JS ---> TypeScript の関係とは違う。
それだと余計に変になっているので、JS ---> TypeScript の関係とは違う。
803デフォルトの名無しさん
2019/12/12(木) 13:08:42.86ID:b3wcvAqB C++は型安全だからC++はC++
804デフォルトの名無しさん
2019/12/12(木) 14:17:55.83ID:CNmkwPhj 型安全認定された!
805デフォルトの名無しさん
2019/12/12(木) 14:59:18.45ID:ZWrMIDdu ていうかTypeScriptはJSが型があまりにもザルすぎて危険だよね、Javaやら
C/C++ほど堅くないにしてもある程度の型はいるよね?っていう発想ででてきた
ものだから C++ から寄せていくならむしろ型をユルくしてくパターンだな
そんなクソ言語には興味がないので具体的に何?ときかれても知らんがな
C/C++ほど堅くないにしてもある程度の型はいるよね?っていう発想ででてきた
ものだから C++ から寄せていくならむしろ型をユルくしてくパターンだな
そんなクソ言語には興味がないので具体的に何?ときかれても知らんがな
806デフォルトの名無しさん
2019/12/12(木) 16:27:22.69ID:AVYkL4QT JSが危険ってどういう事?
C/C++は型がない=危険だけど
JSなんかは型安全な言語だからちゃんと例外になって、
メモリ保護エラーとか起こすこと無いけど?
C/C++は型がない=危険だけど
JSなんかは型安全な言語だからちゃんと例外になって、
メモリ保護エラーとか起こすこと無いけど?
807デフォルトの名無しさん
2019/12/12(木) 16:39:21.91ID:hmkgwwLY Treeの節(Node)は部分木を表すRangeだと考えて差し支えないですかね?
808デフォルトの名無しさん
2019/12/12(木) 16:47:21.68ID:hmkgwwLY C++20のレンジってもしかしてDBのカーソルとかに応用できませんかね?
809デフォルトの名無しさん
2019/12/12(木) 18:38:14.77ID:Ijd1d2r8 毎回フルスキャンしたいならどうぞ
810デフォルトの名無しさん
2019/12/12(木) 18:59:14.59ID:hmkgwwLY ビューで制限できるし遅延評価を目的としたストリームを代弁できるんじゃないかなって思ったのですが。
811デフォルトの名無しさん
2019/12/12(木) 19:07:50.30ID:Z8SHCwDj >>806
型も宣言も無い事が危険になることが多い。
例えば、関数を定義しても仮引数に型がないので、全く間違った実引数列
を指定してしまっても処理系がエラーを出してくれない。関数を修正して
仮引数列の真ん中あたりに新しい仮引数を一つ増やしたとする。
この場合、この関数を呼び出す側もちゃんと全て修正する必要がある。
Cだと型をチェックしてくれるので修正の仕方を間違うとエラーになって
くれることが多い。ところがJSだと間違っても全くエラーを出してくれない。
また、JSの場合、ローカル変数とグローバル変数を間違って使ってしまい、
グローバル変数にいれたつもりがローカル変数になってしまっていることがある。
また、変数を1文字間違えた場合も全くエラーにならず、新しいグローバル変数
が使用されたと解釈されてしまう。
どれも、C言語だとエラーになってくれるので安全だが、JSだと危険。
型も宣言も無い事が危険になることが多い。
例えば、関数を定義しても仮引数に型がないので、全く間違った実引数列
を指定してしまっても処理系がエラーを出してくれない。関数を修正して
仮引数列の真ん中あたりに新しい仮引数を一つ増やしたとする。
この場合、この関数を呼び出す側もちゃんと全て修正する必要がある。
Cだと型をチェックしてくれるので修正の仕方を間違うとエラーになって
くれることが多い。ところがJSだと間違っても全くエラーを出してくれない。
また、JSの場合、ローカル変数とグローバル変数を間違って使ってしまい、
グローバル変数にいれたつもりがローカル変数になってしまっていることがある。
また、変数を1文字間違えた場合も全くエラーにならず、新しいグローバル変数
が使用されたと解釈されてしまう。
どれも、C言語だとエラーになってくれるので安全だが、JSだと危険。
812デフォルトの名無しさん
2019/12/12(木) 19:25:03.70ID:AVYkL4QT >>811
お前が型安全の意味を間違ってるってことはよく分かった。
メモリ保護エラーなど言語で解決されないエラー
(OSがトラップするエラー)になってしまうことを
型安全じゃないっていうんだよ
言語で例外になるならそれは型安全
お前が型安全の意味を間違ってるってことはよく分かった。
メモリ保護エラーなど言語で解決されないエラー
(OSがトラップするエラー)になってしまうことを
型安全じゃないっていうんだよ
言語で例外になるならそれは型安全
813デフォルトの名無しさん
2019/12/12(木) 19:44:50.53ID:Vt8W+oPZ ぬるぽ
814デフォルトの名無しさん
2019/12/12(木) 20:29:23.98ID:f2lx0DlC ツンッ
815デフォルトの名無しさん
2019/12/12(木) 20:46:51.94ID:6QhfdrtV >>808
おそらくできると思う
おそらくできると思う
816デフォルトの名無しさん
2019/12/12(木) 22:31:55.78ID:hmkgwwLY boost.property_treeはノードはコンテナだって書いてる。
アルゴリズムイントロダクションにはポインタ三つ組みのツリー表現が紹介されてるけど、これがノードがコンテナ的な感じだろか。
アルゴリズムイントロダクションにはポインタ三つ組みのツリー表現が紹介されてるけど、これがノードがコンテナ的な感じだろか。
817デフォルトの名無しさん
2019/12/12(木) 22:36:00.00ID:2qfVB5NM818デフォルトの名無しさん
2019/12/12(木) 22:37:04.02ID:hmkgwwLY 仮に、ノードにSTLのリストやベクターを持たせて子ノードを格納すると、別の部分木のイテレータが互換性を持たなくなる。
これはちょっとまずい。
ある部分木の途中からある部分木の途中までを注目することはよくあるから。
これはちょっとまずい。
ある部分木の途中からある部分木の途中までを注目することはよくあるから。
819デフォルトの名無しさん
2019/12/12(木) 22:45:48.06ID:hmkgwwLY ノードの物理量が必ず同じであることを利用すれば、データ構造ヒープを木として使うのが良いんだろか。
これなら、メモリーの確保はSTLのベクターが使え、木全体でイテレータが互換性を持てる。
これなら、メモリーの確保はSTLのベクターが使え、木全体でイテレータが互換性を持てる。
820デフォルトの名無しさん
2019/12/12(木) 22:52:26.39ID:hmkgwwLY 考えれば考えるほど、ノードに子ノード格納用のSTLコンテナを持たせるのは現実味がなく思える。
821デフォルトの名無しさん
2019/12/12(木) 22:59:41.49ID:hmkgwwLY つまり、型安全はプログラムの健全性を担保するものではなく、C++は型安全とは言えないって事で良いのでは。
822デフォルトの名無しさん
2019/12/12(木) 23:02:50.75ID:+RpJiFi7 jsてのは女子小学生の意味か?
823デフォルトの名無しさん
2019/12/12(木) 23:04:10.87ID:hmkgwwLY 型が無いと僕たちには辛すぎるよね。
ミスを発見してくれないから。
ミスを発見してくれないから。
824デフォルトの名無しさん
2019/12/12(木) 23:36:51.22ID:Rc7qy7fw 型はまあ重要だけど型ガーばっか言ってる奴は揃ってバカだよな。
825デフォルトの名無しさん
2019/12/13(金) 00:21:19.32ID:0IHjBlJG 型が無いとinsertがinsert_from_intとかinsert_from_stringとか別々にしないといけなくなって、色々大変そう。
呼び出し側が責任を持つということになるのかも。
呼び出し側が責任を持つということになるのかも。
826デフォルトの名無しさん
2019/12/13(金) 00:22:24.50ID:0IHjBlJG 型演算をコンパイラに任せることが出来なくなって、すべてプログラミングしないといけなくなるのかな。
827デフォルトの名無しさん
2019/12/13(金) 06:47:47.05ID:6WB0hlYg828デフォルトの名無しさん
2019/12/13(金) 07:17:35.68ID:0IHjBlJG 機械語は変数に型がない。
命令で型を使い分ける。
その大変さを考えると型欲しいってなるのかも。
命令で型を使い分ける。
その大変さを考えると型欲しいってなるのかも。
829デフォルトの名無しさん
2019/12/13(金) 07:24:37.08ID:Ry/2QtNy まさにBがCに進化するときの考え方だね
830デフォルトの名無しさん
2019/12/13(金) 09:49:21.00ID:wVkcEFxk >>825
ただし、実引数の型が違うのに仮引数の違いだけの同じ関数名の関数を複数
用意して使うと言う発想はスクリプト言語的な発想。
そのようにした場合、コンパイラが厳密にどの関数を使うかが人間には
分からない事が多いので安全性を損なう場合が多い。
スクリプト言語は RAD言語なのため、できるだけ短い関数名で対処しようと
するが、それが思わぬ間違いを含みがち。
C言語が好かれているのは、どういう処理がされるかが人間が完全予測できる
ことで、「大体の動作」は好まれない。
ただし、実引数の型が違うのに仮引数の違いだけの同じ関数名の関数を複数
用意して使うと言う発想はスクリプト言語的な発想。
そのようにした場合、コンパイラが厳密にどの関数を使うかが人間には
分からない事が多いので安全性を損なう場合が多い。
スクリプト言語は RAD言語なのため、できるだけ短い関数名で対処しようと
するが、それが思わぬ間違いを含みがち。
C言語が好かれているのは、どういう処理がされるかが人間が完全予測できる
ことで、「大体の動作」は好まれない。
831デフォルトの名無しさん
2019/12/13(金) 09:53:03.46ID:wVkcEFxk >>826
型の違いでコードを自動変化させるという思想は、C++の中でも非常に最近に
なって STL (template) で流行りだしたもの。
もともとC言語に型が導入されたのは、プログラマのミスをコンパイラが発見して
エラーを出してくれるようにするためだった。C言語には関数の多態性(overload)
がない。なお、override と overload は別の概念なので、知らない人は検索して
欲しい。
型の違いでコードを自動変化させるという思想は、C++の中でも非常に最近に
なって STL (template) で流行りだしたもの。
もともとC言語に型が導入されたのは、プログラマのミスをコンパイラが発見して
エラーを出してくれるようにするためだった。C言語には関数の多態性(overload)
がない。なお、override と overload は別の概念なので、知らない人は検索して
欲しい。
832デフォルトの名無しさん
2019/12/13(金) 09:53:50.44ID:0IHjBlJG イネーブラ使えば良いのでは。
833デフォルトの名無しさん
2019/12/13(金) 10:00:20.89ID:0IHjBlJG コンセプトコイコイって感じなのかな。
834デフォルトの名無しさん
2019/12/13(金) 11:27:07.79ID:WVlIRY9+ #pragma omp parallel forで
自動分割され、各スレッドに割り当てられた
ループの開始点と終了点を取得することできませんか?
自動分割され、各スレッドに割り当てられた
ループの開始点と終了点を取得することできませんか?
835デフォルトの名無しさん
2019/12/13(金) 18:09:24.89ID:e6j7CnOm >C言語には関数の多態性(overload)がない
さらりと嘘をつくやつがおるな
さらりと嘘をつくやつがおるな
836デフォルトの名無しさん
2019/12/13(金) 18:27:30.70ID:fi1/rC5j 今UE4と組み込み以外でc++の仕事あります?
837デフォルトの名無しさん
2019/12/13(金) 18:33:53.16ID:xTSwswyu オーバーロードあるか?
ディスパッチの方法はいろいろあると思うが
ディスパッチの方法はいろいろあると思うが
838デフォルトの名無しさん
2019/12/13(金) 18:55:58.62ID:ftjAwgQI >>836
USのマイクロソフトに行け
USのマイクロソフトに行け
839デフォルトの名無しさん
2019/12/13(金) 19:01:03.38ID:ysGzQi5M >>830
> ただし、実引数の型が違うのに仮引数の違いだけの同じ関数名の関数を複数
> 用意して使うと言う発想はスクリプト言語的な発想。
え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ?
「同じ関数名の関数を複数用意」できるのは静的型付け言語の特徴だよ
> ただし、実引数の型が違うのに仮引数の違いだけの同じ関数名の関数を複数
> 用意して使うと言う発想はスクリプト言語的な発想。
え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ?
「同じ関数名の関数を複数用意」できるのは静的型付け言語の特徴だよ
■ このスレッドは過去ログ倉庫に格納されています
