1 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 10:57:31.60 ID:JaaB5Egp.net] 前スレ C++相談室 part156 https://mevius.5ch.net/test/read.cgi/tech/1621389313/
136 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 15:14:48.98 ID:9cCAU3aU.net] 話は勝手に変わるけど、 { 1,2,3,4,5 } のような書き方が initializer_list になる場合とならない場合を全て知りたいけど 良く分からないので、誰か教えてくれまいか。
137 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 15:21:14.80 ID:9cCAU3aU.net] >>128 的を外しているかも知れないけど、その書き方をAと書くとすると、どんな文脈でも A自体が最初に必ずいったん initializer_list<T> になった後にそれぞれの文脈で処理されるという ことなのか、あるいは、 auto x {・・・}; auto x = {・・・}; auto x = TYPE {・・・}; func({・・・}); のようにいろいろな書き方や文脈が変わるとそもそも A は意味論的にすら initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される のか、どちらなんだろう????
138 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 15:24:22.53 ID:9cCAU3aU.net] あと、良く分からないのが、 struct CPerson { ・・・ CPerson(int a, int b, int c) {・・・} //(1) }; とあった場合、 1. CPerson a{1,2,3}; 2. CPerson a={1,2,3}; 3. CPerson a=CPerson{1,2,3}; のどれを書いても多分、(1)が呼び出される気がするけど、 struct CPerson { ・・・ CPerson(initializer_list<int> a) {・・・} //(2) }; と書いた場合、1,2,3 はやはり全て(2)が呼び出されるのだろうか?
139 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 16:38:31.07 ID:z/GAGLjl.net] >>129 > initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される initializer_list を経由しないことはある。 おおざっぱには initializer_list を受け取る文脈では initializer_list だし、 推論が必要なとき (auto やテンプレート) にも initializer_list に推論されるが、 そうでないときは initializer_list を経由しない。
140 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 16:48:40.83 ID:z/GAGLjl.net] >>130 優先順位がある。 1. 2. 3. のいずれも initializer_list としての解釈が「優先される」。 initializer_list を受け取るコンストラクタが存在しなければ 三引数のコンストラクタが呼出される。
141 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 16:54:44.67 ID:9cCAU3aU.net] >>132 なるほど。確認だけど、 1. CPerson a{1,2,3}; 2. CPerson a={1,2,3}; 3. CPerson a=CPerson{1,2,3}; 4. CPerson a(1,2,3); 5. CPerson a=CPerson(1,2,3); は、どれも3引数のコンストラクタで受け取ることは可能ということでOk? 1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能? 4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??
142 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:08:54.15 ID:z/GAGLjl.net] >>133 (initializer_list を受け取るコンストラクタが無ければ) いずれも 3 引数のコンストラクタが起動されるが、 5. は 3 引数のコンストラクタでオブジェクトを構築した上で a にコピーする。 (コピーコンストラクタ、またはムーブコンストラクタが起動する。) ただし RVO が有効な状況ではコピーやムーブはが省略されるので 5. は 4. と同じ。 そしてこの場合には関係ないが、波括弧によるコンストラクタ起動では引数の暗黙の型変換を許さない といった重要な違いがある。 (initializer_list を受け取るコンストラクタが有る状況でも) 4. と 5. は initializer_list とは解釈されない。
143 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:14:28.81 ID:9cCAU3aU.net] >>134 1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能? 4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能?? については?
144 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:19:50.55 ID:z/GAGLjl.net] >>135 それが区別できるだけのルールは既に提示したつもり。
145 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:21:53.70 ID:9cCAU3aU.net] >>136 すまん。もう一度明言してくれるとありがたい。
146 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:27:44.09 ID:td+NCu9W.net] template <int N> void test(std::bitset<N>& arg); int main() { std::bitset<1ull> lvalue; test(lvalue); } これ、Nが推定できないのはなんで?
147 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:28:31.68 ID:td+NCu9W.net] すまん、自己解決 unsigned long long Nが正解だった
148 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:30:02.71 ID:z/GAGLjl.net] >>135 > 1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能? はい。 可能です。 > 4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能?? はい。 不可能です。 ところで >>134 で、オブジェクトを構築した上でコピーするのは 5. と述べたけど 3. もそうやな。
149 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:33:59.90 ID:z/GAGLjl.net] >>138-139 正解は size_t だよ。 size_t が具体的にどの整数型に対応するかは処理系定義なので もちろん unsigned long long と等価なこともあるだろうけど。
150 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:40:36.29 ID:9cCAU3aU.net] >>136 念のため、その「述べた」はずのルールがどの文章だったのか教えてもらえれば ありがたい。
151 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 22:54:32.78 ID:CH0dz2ka.net] vector<long long>を取る関数にvector<int>を渡すと、その引数はvector<long long>にキャストされる で、vector<int>を取る関数にvector<long long>を渡すのはNG この理解は合ってますでしょうか
152 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 23:03:24.64 ID:/B0HDd6y.net] 間違ってる vector<long long>とvector<int>には何の関係もない intとstringに関係がないのと同じくらい関係ない
153 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 11:13:55.26 ID:5K/SmrCp.net] pair<int, int> は pair<long long, long long>にキャストできるけど vectorにそういうコンストラクタはないな
154 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 12:13:09.91 ID:ssGfr3Zr.net] >>103 VS6.0の頃は地獄だったよ forループの変数は生キノコるわ例外出たら自動変数の破棄全部ぶっ飛ばすわでMSはクソの集大成だと確信していたわ
155 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 12:42:32.36 ID:5K/SmrCp.net] 例外処理が2系統、数え方によっては3系統あるのがね
156 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 15:19:34.50 ID:Pb4opnB5.net] STOUT を STDOUT に空目してこそプログラマ脳 「ミロ」そっくりの缶ビール 子どもが誤飲し販売禁止に(豪) - Yahoo! JAPAN https://article.yahoo.co.jp/detail/1a7b2e0b9ab108ebf156f22e654f60634c39c88b 子どものみならず大人にも大人気のココア味の麦芽飲料「ミロ」は、世界中で愛されている。このほどオーストラリアの企業が、 ミロにそっくりのパッケージデザインで缶ビールを製造したことにより「子どもが間違えて飲んでしまった」という苦情が届いた。 これにより同製品の広告使用禁止が言い渡されたことを『news.com.au』などが伝えている。 問題の缶ビールは、豪ビクトリア州にある企業「Howler Brewing Company」の「Chocolate Milk Stout」というチョコレート風味の黒ビールだ。 缶のデザインは有名な麦芽飲料「ミロ」を真似たもので、お馴染みの緑色を背景に製品名や販売会社を示す文字の色やフォントまで同じデザインとなっている。 同社はこれまでにも、Instagramや炭酸飲料「スプライト」など認知度の高いロゴデザインを真似た製品を作り出している。
157 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 17:52:50.79 ID:BMARPdQo.net] 関数オブジェクトじゃなくて関数を記述するメリットってなんかある? テンプレートは近々関数オブジェクトの方でも使えるようになるんでしょ?
158 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 19:08:22.19 ID:n19OoAH+.net] >>149 タイプ数が少ない、くらいかね。
159 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 20:12:20.52 ID:BMARPdQo.net] >>150 じゃあそのうち「関数はレガシーな書き方なので関数オブジェクトを使用するようにしましょう」とか言われるようになるの?
160 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 00:32:59.41 ID:E2GGZp0E.net] >>149 複数の関数から呼ばれる関数どうすんのさ グローバル変数や引数にいちいち入れるの?
161 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 00:37:37.24 ID:E2GGZp0E.net] >>146 forの変数スコープは回避策あったやん 98年発売なんでもうちょっとどうにか出来たのではとも思うが
162 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 00:45:38.19 ID:E2GGZp0E.net] あ、すまんラムダじゃなくて関数オブジェクトか 確かにタイプ数くらいしか思いつかんけど テンプレートは既に使えるのでは?関数テンプレートに出来て関数オブジェクトに出来ないテンプレートの使い方あったっけ
163 名前:デフォルトの名無しさん [2021/08/21(土) 10:46:43.63 ID:+K/WXdke.net] >>148 日本でも煙草を真似したデザインのチョコレート菓子があったけど 間違って煙草食った子供が死んだとか裁判になったとか聴かないな おそらくあったんだろうな
164 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 12:15:51.53 ID:t0h3aTQf.net] >>154 実体化の制御かね。 関数テンプレートは使用されない限りエラーにならない。 SFINAEもそうじゃなかったっけ?
165 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 13:42:38.53 ID:E2GGZp0E.net] クラステンプレート内の普通のoperator ()だとそうだね operator ()がテンプレートの場合ならほぼ関数テンプレートと同じ事出来るとは思うけど 文法上、明示的にテンプレート引数指定する際、関数と共通の書き方には出来ないな・・
166 名前:デフォルトの名無しさん [2021/08/21(土) 20:47:50.56 ID:7GAoG1Iq.net] Rustのメモリ安全性はボローチェッカーによって担保されているが、 Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、 GC無しでView types参照の有効性を検証することによってメモリ安全性を保証しつつ 限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか? Nimの実験的特徴 著者: アンドレアス・ルンプ バージョン: 1.5.1 nim-lang.github.io/Nim/manual_experimental.html Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し ているにもかかわらず、Cのソースコードを吐き出せるのでC言語でリモートワークされ ている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる 「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
167 名前:デフォルトの名無しさん [2021/08/21(土) 22:35:53.53 ID:o/sUihIV.net] 質問です。 std::array ary = { 1, 2 }; ↑の{}で初期化すると、 要素数を自動推論できるようにするにはどう実装すればいいんでしょう?
168 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 22:55:48.18 ID:+FOhqLVw.net] 推論補助だと思う https://cpprefjp.github.io/reference/array/array/op_deduction_guide.html
169 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 01:17:33.04 ID:maGRuunL.net] >>155 食ったところで飲みこまずにペッペッて吐き出すだろ
170 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 04:31:26.04 ID:Roj0wExz.net] g++ -std=c++17
171 名前:デフォルトの名無しさん [2021/08/22(日) 12:59:29.57 ID:0Cz6ueFz.net] Rustのメモリ安全性はボローチェッカーによって担保されているが、 Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、 GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ 限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか? Nimの実験的特徴 バージョン1.5.1 nim-lang.github.io/Nim/manual_experimental.html 第二プログラミング言語として Rust はオススメしません Nim をやるのです https://wolfbash.hateblo.jp/entry/2017/07/30/193412 Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる 「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
172 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 18:45:30.76 ID:gNvESTNy.net] std::chrono::time_point::time_since_epoch()が返すエポックタイムの原点はいつですか? もし具体的に規定されていないとしても、 ミリ秒パートが0であることは保証されていますか?
173 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 19:20:25.99 ID:gNvESTNy.net] ある意味自己解決しますたorz https://cpprefjp.github.io/reference/chrono/system_clock.html >C++17 以前の場合、system_clock のエポックがどの時間を指しているかは未規定だが、ほとんどの処理系は UNIX 時間(1970年1月1日0時0分0秒)を指している >C++20 以降の場合、system_clock のエポックは必ず UNIX 時間(1970年1月1日0時0分0秒)を指す しかし(特にC++17以前において)ミリ秒パートが0が保証されているのかどうかがはっきりしませんぬ、
174 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 19:28:39.82 ID:VeL/IzCV.net] 生年月日をUNIX時間で表現できないオッサンはこのスレにどのくらいいるの?
175 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 21:27:04.43 ID:gNvESTNy.net] 生年月日ならミリ秒まで言える必要は無いが ログの時刻を極力正確に(WindowsのGetLocalTime()と同じ時刻で)記録したいのでつ∀`;)
176 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 04:13:32.16 ID:F733kpwr.net] 1970年以前生まれの50代以上のオッサン
177 名前:デフォルトの名無しさん [2021/08/23(月) 16:50:49.24 ID:Rrt4HCug.net] B.C. A.D. B.E.
178 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:05:26.78 ID:xWEF4I0D.net] B.E.って何ですか UCとSEとかRCとかじゃないの
179 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:52:48.51 ID:xWEF4I0D.net] ていうかsystem_clockはC++17以前からtime_tと相互変換できるのに(system_clock::from_time_t()、system_clock::to_time_t())、 エポックがどの時間を指しているかは未規定とかおかしくね↑?
180 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 23:20:43.35 ID:AuTnTHJo.net] 別におかしくない 変換時にエポックの差の分ずらせばいいだけだろ
181 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 23:31:13.03 ID:sPTJEjpv.net] そんなことよりなんでtime_tは符号なしなん? 64bit拡張するときに符号ありにしとけば166みたいな煽りを受けずにすんだのに
182 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 00:03:00.26 ID:24MephMZ.net] 符号なし使うのは総じてセンスないよね
183 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 07:17:43.25 ID:NEyNeI43.net] 符号付き整数はwrap aroundしたときの挙動が処理系依存か何かだったはず…… ハードウェア例外を生じるやつがあるらしい
184 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 07:52:57.66 ID:4Ohx7QuI.net] >>173 純粋にプログラミングスキルの話と受け取った>>167 に謝れ
185 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 08:21:39.19 ID:NErefsYh.net] >>175 オーバーフローしたときにラップアラウンドさせる使い方が数値計算としては特殊だからねぇ。
186 名前:デフォルトの名無しさん [2021/08/24(火) 15:27:02.85 ID:WZMj7UxV.net] >>167 ntp使え
187 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 17:48:36.53 ID:DexxKsi1.net] >>174 time_tを符号なしにしたやつはアフォだと思うが それをもって符号なしを使うやつ全員が例外なくアフォというのは 早まった一般化という誤謬だ
188 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 22:08:27.39 ID:OPjw/0cg.net] >>160 なるほど!ありがとうございます
189 名前:167 mailto:sage [2021/08/25(水) 00:50:22.37 ID:MXKFEwSS.net] そういやーまだご存命の方もいらっしゃるんでしたね >>179 符号付きにしたら2038年問題が2004年問題になってた 人類は間に合わなかった
190 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 07:34:23.44 ID:VHSVWUHA.net] 30年も猶予があったのにな
191 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 10:43:26.33 ID:M5WZn8fZ.net] ヒトラー「2036年、人類と云われる者は居なくなっている」
192 名前:デフォルトの名無しさん [2021/08/26(木) 16:49:35.75 ID:WPRv8+9f.net] 関東大震災だって100年も猶予があっても何もしない國ですし
193 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 21:09:02.54 ID:xnTAPql6.net] 色々やってるぞ 庶民を助ける政策をやってないだけで
194 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 17:50:19.96 ID:BFKMFKNN.net] https://twitter.com/cpp_akira/status/1430779310885859330 最近はC++の発表資料を公開すると「Rustでいいじゃん」というコメントがたくさんつくのか…。 Rustへの言及とか一文字も書いて
195 名前:ネいのに。 普及活動だと思うけど、さすがに嫌がらせチックに見える。 https://twitter.com/moriyoshit/status/1430795812552863744 C++の件に限らず、旧来からある言語の長所短所を理解せずに、 表面的に新言語を推す発言を見ると、 果たして当人は新しい言語の方も理解できているのだろうか、 という疑念をもってしまう... (deleted an unsolicited ad) [] [ここ壊れてます]
196 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 19:27:10.45 ID:wbifwX7a.net] >>186 Rustはいらんけど、制約を強化してコンパイルエラーを増やしたc++--は欲しいなぁ。 スライシングはすべてコンパイルエラー、ダウンキャストはメンバー関数とフレンド関数のみ使用可能 new deleteはメンバー関数とフレンド関数のみ使用可能(global operator new/deleteは廃止) といったメモリ周りの制約強化は欲しい。
197 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:03:18.97 ID:dCOU+NEa.net] Rustを使って欲しいなら、そう言えばいいのに 人のすることを小馬鹿にするような態度で来るから敵と見られるんだよ コミュ障にも程がある
198 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 18:35:03.00 ID:iJLWqDs6.net] インテルコンパイラの-fastには-staticが含まれてるけど、なんでスタティックリンクは速いの?
199 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 18:49:01.71 ID:Ovc44+68.net] ライブラリ使うときのロードの手間がなくなるからね
200 名前:はちみつ餃子 mailto:sage [2021/08/28(土) 23:41:54.59 ID:V8MBAFoh.net] スタティックリンクにすると最適化の情報が増えるというのもあると思う。 C/C++ では翻訳単位ごとにコンパイルしてからリンクするという工程を踏むから、 コンパイル時には他の翻訳単位の情報を知らず、他の翻訳単位の情報を利用した 最適化が出来なかった。 今では LTO が当たり前になって、リンク時にあらためてコンパイラに戻して最適化 させる仕組みがあるんだけど、バイナリ自体が別物だとその仕組みを使えない。
201 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:13:16.45 ID:h29TClHM.net] std::threadってスタックサイズを指定できないってマジ? 仮想メモリを使えない組み込み用途だとどうすんじゃ……
202 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:20:14.34 ID:kSqJuAzn.net] native_handle()関数で環境に応じたスレッドハンドル(linuxならpthread)を取得できるから、スタックサイズを設定するところだけ環境ごとに用意して切り替えればいいよ
203 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:28:41.66 ID:h29TClHM.net] Windowsみたいにスレッドハンドルを生成したときはスタックサイズ指定済のとき、みたいな 組み込み用OSがあったらどうすんじゃ……
204 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:46:08.60 ID:h29TClHM.net] とわいえμITRONのcre_tsk()は >cre_tsk でスタック領域を明示しない場合のタスクのスタックや割込みハンドラ/割込みサー >ビスルーチンのスタックは、OS が用意する「スタック用メモリ」から割り当てられます。 >スタック用メモリのサイズを定義する STKMSZ の標準値は 0 で、この場合、main 関数が使って >いる処理系のデフォルトのスタック領域(スタックセクション)を、OS のスタック用メモリとし >ます。この場合の実際のスタックサイズは、リンカでのセクション設定とスタートアップルー >チンでの初期スタックポインタ値で決まります。 みたいなことが書いてある C/C++界隈はみんな頭おかしい……
205 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:55:46.65 ID:h29TClHM.net] ゴメ勘違いcre_tsk()(IDがOSが自動割り当てのやつはacre_tsk())は 第2引数に与えるT_CTSK構造体でタスクごとにスタックサイズを指定できたわ;;; なんでstd::threadではできないんじゃ……
206 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:18:20.52 ID:vSvS+48a.net] コイツ前スレでも連レスしてたムーブ全く理解してないバカだよね? NGしたいからトリップつけてください
207 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:25:04.60 ID:x8xWTwL3.net] >>192 標準じゃ無理でしょ 全てのスレッドを変えたいならリンカのオプションとかで指摘できる環境もあるけど boost::thread使って boost::thread::thread_attribute::set_stack_size() で設定するがよろし >>193 native_handle()関数でハンドル取れると言う事はスレッド開始してる 開始済みスレッドのスタックサイズを変えられる環境って聞いたことない
208 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:30:52.45 ID:AWkeWwKB.net] >>196 ほんと組み込み屋は馬鹿だな
209 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:52:45.64 ID:h29TClHM.net] >>197 完璧な理解をサンプルコード付きで示したやろうが;;; 論点はなんでムーブに置き換えられるケース(明示的にstd::move()したら明らかに効率的なコードになる において最適化でムーブにならないのか?なのだが高度すぎるのか文盲か故に>>197 が付いてこれていないだけ >>197 はブーメラン
210 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:54:56.72 ID:h29TClHM.net] もっとも天才の漏れは答えにたどりついたがな ムーブコンの実装がコピコンの実装より効率的である保証が無い以上、 置き換え可能なケースであってもコピコンからムーブコンへの機械的置き換えは正当化されない
211 名前:デフォルトの名無しさん [2021/08/30(月) 14:34:41.72 ID:jKIf8Vzq.net] 天才のインフレ
212 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 16:43:13.53 ID:Uxp79PtR.net] Rustみたいにコンパイル時にいちいち参照のチェックするんじゃなくて C++で最終的に完成したバイナリに対してメモリサニタイザーを一回動かす ってのではだめな理由ある?
213 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 20:16:57.41 ID:dG55Jwur.net] >>203 動かしたフロー以外のフローについて不安が残るし、サニタイザーの精度がどれほどかという問題もありそう。
214 名前:はちみつ餃子 mailto:sage [2021/09/01(水) 23:35:30.93 ID:3mB0e8fG.net] >>203 ものによって賢さの程度が違うから一概には言えないけど 基本的にはサニタイザは実際に起こった問題を検出するものなので 入力値次第で問題が有ったりなかったりするようなケースを検出できなかったり、 言語仕様上で未定義なものがたまたま問題ないアクセスになってしまうようなケースも 検出できないかもしれない。 問題が起こっていて再現条件が分かっているときに検証するツール、つまりデバッグ用のツール としてはサニタイザは有用だし、ごく基本的なテストツールとしても使えるけど、 Rust のライフタイムチェックほど網羅的ではない。
215 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 05:18:49.53 ID:90/tsZBA.net] 一言でまとめると動的試験てことだな
216 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 09:16:16.79 ID:6YHhlfzl.net] MozillaのFireFoxの場合、わざとクラッカーがセキュリティーホールを見つけ出して そこを付いてくるから、普段の実行テストでは一度も発見できなかった メモリーバグが問題になるが、普通のアプリの場合、ユーザーがわざとバグを 付くことはないから、そのようなホールはあまり関係ないと思う。 テスト駆動開発とかアジャイル開発とかも、普段使いで問題が無いかをテスト することで大部分のバグが無い状態で開発していこうとする考え方。 それでもほとんどのメモリーバグは無い状態になっている。 メモリーバグがあると、普段使い的なテストをしても発覚することが多いから。 昔から言われているメモリーバグの問題点は、再現性が有る場合でも、バグが ある行とそれが発覚した時期とがずれていることがあるから。 デバッグモードでコンパイラが自動的にチェックするコードを入れていれば、 それはなくなるはず。 Rustはその意味で、経験法則的にFireFoxみたいな特殊なものでは意味があるが 一般アプリでは余り意味が無い。ブラウザの特殊性は、世界中のクラッカーが セキュリティーホールを探してわざとその穴を付いてくること。一般アプリでは それがないので、隠れたバグは隠れたままになっていることが多くて、 テストで出てこなかったバグは実際問題的には余り問題となら無い事が多い。
217 名前:デフォルトの名無しさん [2021/09/03(金) 09:22:40.61 ID:6YHhlfzl.net] >>207 例えば、ダングリングポインタ(Use After Free)は、ptrがどこかでまだ使用中なのに、 free(ptr)としてしまうこと。しかし、そのfree()をした時点ではアプリはダウン しないし、ptrに対して読み書きした段階でもまだ発覚せず、ptrが指すメモリー アドレスを別の目的で使用してしまって、お互いに読み書きがある種の干渉を 起こしてしまって、データがめちゃくちゃになり、それによってどこかで不具合 が生じた時点で発覚する。 なので、バグの根本原因であるfree(ptr)を実行した行がどこかを探し出しにくいと される。 しかし、このバグの場所とバグが起きた場所のずれは、デバッグビルド時に速度を 落としてチェックすれば本当は防げるはず。
218 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 09:24:49.55 ID:6YHhlfzl.net] >>208 チェックと言っても人間が手で書く必要は無く、コンパイラがチェックコードを 自動生成できるはず。
219 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:00:52.25 ID:yL2Kwy6+.net] 根拠のない決めつけばかりで気持ち悪い。
220 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:16:16.17 ID:lmzB7IZ6.net] >>207 世の中にはテスターという職種の人がいてだな
221 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:46:20.27 ID:yJUEU9nq.net] >>207 任意のファイルを読むアプリはファイルのパーサーの脆弱性をついてユーザ権限でコードを実行される可能性がある どちらかと言えばアプリよりサーバとしてアクセスを受け付けているプログラムの脆弱性をつかれて攻撃コードの実行を許してしまうことが多い さらに上のような場合でも、アプリやサーバのプログラム自体に脆弱性があるのではなく、使用しているOSのAPI側の実装の脆弱性をつかれる可能性がある こういうアプリやサーバやOSのコードの脆弱性にMSやGoogleは悩まされている
222 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:00:44.84 ID:yJUEU9nq.net] Valgrind と言う動的解析ツールを調べて見るといい うちはC++のプログラムは基本これを通すことになってる 商用ならもっといいツールもあるかも知れない そういうのを利用しても充分でないから静的解析するRustが注目されている
223 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:27:43.59 ID:6Xh4x7Us.net] 商用の静的解析ツール使ってると、正直メモリ関係のバグなんてありえないと思えるくらいいろいろ見つけてくれるよ
224 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:44:23.16 ID:9y+1HwQb.net] コンパイル時間に糸目を付けなければ、静的解析はもっと出来る。
225 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:47:10.63 ID:lmzB7IZ6.net] > メモリ関係のバグなんてありえないと思える lintの副作用がモロに出てるなw
226 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 15:20:21.54 ID:MvVz2a9W.net] 言うまでもない事だが完璧なメモリチェッカーは存在し得ない 停止問題と同値だからな
227 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 15:50:45.07 ID:6Xh4x7Us.net] 完璧無理っておまえの毛髪の量がプログラム停止に与える影響が読めないとかそういう話だろ? 限定的な範囲で正しけりゃ十分だよ
228 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 16:54:40.55 ID:lmzB7IZ6.net] ゴールポストは動かしちゃダメだよ
229 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:38:29.50 ID:6Xh4x7Us.net] 無限遠のゴールを設定するのはアホだべ
230 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:51:18.36 ID:xmwLNRYX.net] スクリプト言語も普通にクラッシュ
231 名前:することあるから [] [ここ壊れてます]
232 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:52:37.20 ID:xmwLNRYX.net] OSのコアダンプ出力とリブートに救われる手のひらの孫悟空
233 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 18:28:35.67 ID:iCLUv6gH.net] rustでもメモリアロケーション失敗するとパニックになる、てリーナスが突っ込んでいたろ。 c++の場合はどうなんのかな。
234 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 20:13:28.89 ID:USKNPKWa.net] CoverityとVectorCASTは使ったことあるけど検知レベル最高にしても見逃すリークや二重フリー, ダングリングはそれなりにある (そもそもコードの構造が悪い場合も多いが) 検知レベル上げ過ぎると逆にFalse Positiveも増えるし
235 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 07:59:49.00 ID:kFVsNuY8.net] 無限遠のゴールポストを動かすって こいつ文系か?
236 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 08:08:40.61 ID:N/QuNfWR.net] まあ見つからないのは間違いなく書き方が悪いよな