前スレ
C++相談室 part156
https://mevius.5ch.net/test/read.cgi/tech/1621389313/
探検
C++相談室 part157
レス数が1000を超えています。これ以上書き込みはできません。
2021/08/09(月) 10:57:31.60ID:JaaB5Egp
2デフォルトの名無しさん
2021/08/09(月) 11:24:40.26ID:M3I2CbwW2021/08/09(月) 11:43:30.76ID:GC6B710d
>スレッドが実行中か確認したいってどんなときなのかな?
たとえばゲームでセーブするとき、
メインの処理はブロックしたくないので別スレッドで実行しつつ「セーブ中です」みたいな表示を出し、終了したら消す
みたいな時かな
たとえばゲームでセーブするとき、
メインの処理はブロックしたくないので別スレッドで実行しつつ「セーブ中です」みたいな表示を出し、終了したら消す
みたいな時かな
2021/08/09(月) 11:48:24.98ID:OWI9S7jW
2021/08/09(月) 11:56:53.44ID:GC6B710d
>>4
もちろん方法ならいくらでもあると思うけど、別スレッドのインスタンス1つで全部済むなら、そっちの方がすっきりするし楽でしょ
もちろん方法ならいくらでもあると思うけど、別スレッドのインスタンス1つで全部済むなら、そっちの方がすっきりするし楽でしょ
2021/08/09(月) 12:12:57.14ID:GC6B710d
>>4,5
あぁ、いやそうじゃないか
ゲームのあらゆる部分をスレッドセーフで設計すれば良いのかもしれないけど、
ゲームのメインの状態遷移なんてわざわざマルチスレッド化するような重い処理でもないので、
その辺の表示とかはシングルスレッド前提で書いてるわけよ、もちろんそのほうが楽だからw
あぁ、いやそうじゃないか
ゲームのあらゆる部分をスレッドセーフで設計すれば良いのかもしれないけど、
ゲームのメインの状態遷移なんてわざわざマルチスレッド化するような重い処理でもないので、
その辺の表示とかはシングルスレッド前提で書いてるわけよ、もちろんそのほうが楽だからw
2021/08/09(月) 12:17:21.54ID:qYrd5+ip
この「実行中」が実際にタイムスライスが割り当てられている状態を意味しているんであれば
OSにもよるが実装が大変な割に実際に役立つシーンは限られるような。
>>4であればjoinableで十分だろうし。
OSにもよるが実装が大変な割に実際に役立つシーンは限られるような。
>>4であればjoinableで十分だろうし。
2021/08/09(月) 12:25:08.93ID:DVzh2mox
別スレッド処理の進捗を他スレッドから閲覧するためのパラメータを使っってる時点で、お察し
2021/08/09(月) 12:40:21.77ID:S8n0VVLE
前スレ997は色々勘違いしてそうな気がする
普通pushしようとしてキューが満杯なら何らかの同期メカニズムで自分を待ち状態にする
pop側はpopしたらその同期メカニズムに対して待ちを解除するだけだからスレッド自体が実行中かどうかなんて見る必要がない
普通pushしようとしてキューが満杯なら何らかの同期メカニズムで自分を待ち状態にする
pop側はpopしたらその同期メカニズムに対して待ちを解除するだけだからスレッド自体が実行中かどうかなんて見る必要がない
2021/08/09(月) 13:35:16.98ID:eF2Q2UUf
std::condition_variable
11ハノン ◆QZaw55cn4c
2021/08/09(月) 13:52:46.20 正直いって pthread の条件変数は私には理解が難しく、私は安易に win32api のクリティカルセッション&シグナルを多用してしまうのです
ただし、スタベーションに陥ることが多々あり、どうもクリティカルセクション・シグナルでは駄目なパターンがあるかもしれない、とヒヤヒヤしています‥‥
ただし、スタベーションに陥ることが多々あり、どうもクリティカルセクション・シグナルでは駄目なパターンがあるかもしれない、とヒヤヒヤしています‥‥
2021/08/09(月) 14:01:28.39ID:TRAo/ccI
>>2
別に
Producer(pushする側)がこれからpushするのを待っている場合、
Consumer(popする側)はキューサイズ(キューの中の要素数)を見ても
Producerが待っているのかどうかの情報を得られない
なぜなら、まだpushしていないからな
別に
Producer(pushする側)がこれからpushするのを待っている場合、
Consumer(popする側)はキューサイズ(キューの中の要素数)を見ても
Producerが待っているのかどうかの情報を得られない
なぜなら、まだpushしていないからな
2021/08/09(月) 14:14:45.62ID:TRAo/ccI
2021/08/09(月) 14:32:36.91ID:JaaB5Egp
2021/08/09(月) 14:33:19.09ID:S8n0VVLE
>>13
いや、スレッドの実行状態なんて見てもしゃーないって話
pop後にpush側が実行中だとしてもそのチェック直後にpushするかも知れん
要するにスレッドの実行状態の変化は排他制御できないから意味がないって話
pop前にいちいちスレッドをsuspendしてチェックしてからresumeするとかするならできるかもしれないけどw
いや、スレッドの実行状態なんて見てもしゃーないって話
pop後にpush側が実行中だとしてもそのチェック直後にpushするかも知れん
要するにスレッドの実行状態の変化は排他制御できないから意味がないって話
pop前にいちいちスレッドをsuspendしてチェックしてからresumeするとかするならできるかもしれないけどw
2021/08/09(月) 14:34:07.65ID:aCXIbwxy
std::vectorの部分ベクトルの切り出しって絶対O(要素数)の計算量かかりますよね?
2021/08/09(月) 14:40:14.51ID:fi8SjIox
「部分ベクトルの切り出し」とは何かを定義せよ。
2021/08/09(月) 14:47:54.30ID:eF2Q2UUf
こういうの?
std::vector<int> a{ 4, 6, 4, 9 };
std::vector<int> b(a.begin() + 1, a.begin() + 2);
std::vector<int> a{ 4, 6, 4, 9 };
std::vector<int> b(a.begin() + 1, a.begin() + 2);
2021/08/09(月) 15:11:52.58ID:KzU8BZnC
参照できればいいのか、コピーがいるのか、切り出し位置はわかってるのか、検索を伴うのか、
その辺の条件もなしに計算量の議論なんて出来んわ
その辺の条件もなしに計算量の議論なんて出来んわ
2021/08/09(月) 16:11:11.49ID:6v1cUfUr
クラスAの内部にクラスBがある (入れ子クラス) として、BからAのメンバにアクセスするテクってないんですかね?
アクセスしたいメンバをstaticにはしたくないです
アクセスしたいメンバをstaticにはしたくないです
2021/08/09(月) 16:20:25.36ID:GC6B710d
>>20
AへのポインタをBに定義して、コンストラクタかなんかで渡せばいいのでは?
AへのポインタをBに定義して、コンストラクタかなんかで渡せばいいのでは?
22はちみつ餃子 ◆8X2XSCHEME
2021/08/09(月) 16:48:43.56ID:OWI9S7jW >>20
クラスの中でクラスを定義しても A の名前空間の中に B が定義されるってだけ。
B のオブジェクトを作っても A のオブジェクトが存在しないなら存在しないオブジェクトのメンバにはアクセスできない。
A のオブジェクト (インスタンス) と B のオブジェクトの間には勝手に関係が出来たりもしない。
関係ないのに関係あるように見えて初心者が混乱してるのはどっかの質問サイトでも見たことがある。
よく理解できてないならまずはクラスの定義を入れ子にせずにやってみるのがオススメ。
クラスの中でクラスを定義しても A の名前空間の中に B が定義されるってだけ。
B のオブジェクトを作っても A のオブジェクトが存在しないなら存在しないオブジェクトのメンバにはアクセスできない。
A のオブジェクト (インスタンス) と B のオブジェクトの間には勝手に関係が出来たりもしない。
関係ないのに関係あるように見えて初心者が混乱してるのはどっかの質問サイトでも見たことがある。
よく理解できてないならまずはクラスの定義を入れ子にせずにやってみるのがオススメ。
2021/08/09(月) 16:52:51.13ID:S8n0VVLE
2021/08/09(月) 16:59:35.77ID:eF2Q2UUf
2021/08/09(月) 17:00:48.11ID:hJGoZPOe
絶対レビュー通らないウンココードでよいなら
(char*)this + offsetof(A, b)でなんとかならんのか
(char*)this + offsetof(A, b)でなんとかならんのか
2021/08/09(月) 17:33:38.90ID:GC6B710d
class Aをtemplate化して、class BでAを継承すれはメンバにはアクセスできるけど、たぶんそういうことがしないんじゃないんだろうなw
コンテナクラスのイテレータから親クラスインスタンスのメンバにアクセスしたいとかか?
コンテナクラスのイテレータから親クラスインスタンスのメンバにアクセスしたいとかか?
2021/08/09(月) 17:48:31.00ID:eF2Q2UUf
リファレンサを作るときなんか親オブジェクトへのポインタ使うね
2021/08/09(月) 20:07:17.09ID:XVy1LhuX
2021/08/10(火) 00:55:38.92ID:rk6SLsdN
親オブジェクトへのポインタをうっかり共有ポインタにすると循環参照の原因になる(小並感)
2021/08/10(火) 03:53:30.08ID:mPLpHQ1a
+=の引数が1のときは++を呼ぶようにする方法ってありますか
2021/08/10(火) 08:16:11.83ID:JssHBcjd
2021/08/10(火) 12:11:16.71ID:OMlKC5pQ
TCPIPのソケット通信プログラム作ろうと思っているのですが、
コネクションを維持し続ける場合のデメリットって何がありますか?
コネクションを維持し続ける場合のデメリットって何がありますか?
2021/08/10(火) 12:42:43.27ID:ZRv1Vy3I
>>32
後出しになって申し訳ありませんが、*、!=、++、+=、- 辺りが定義されたイテレータを持つ自作のデータ構造を範囲for文で走査することを考えています
それ自体は想定した通りにできたのですが、その範囲for文をomp並列化するとイテレータのインクリメントが ++ でなく +=1 で行われるようになります
で、その自作データ構造では ++ よりも += の方が重い実装になっているので、+=1 よりは ++ の方を使ってほしいです
omp に特有の仕様に思えるので、普通に += の冒頭で引数が1かどうかの分岐を入れることにしようかと思います
ありがとうございました
後出しになって申し訳ありませんが、*、!=、++、+=、- 辺りが定義されたイテレータを持つ自作のデータ構造を範囲for文で走査することを考えています
それ自体は想定した通りにできたのですが、その範囲for文をomp並列化するとイテレータのインクリメントが ++ でなく +=1 で行われるようになります
で、その自作データ構造では ++ よりも += の方が重い実装になっているので、+=1 よりは ++ の方を使ってほしいです
omp に特有の仕様に思えるので、普通に += の冒頭で引数が1かどうかの分岐を入れることにしようかと思います
ありがとうございました
2021/08/10(火) 14:57:46.78ID:W7aMf5pX
マルチスレッドのキューのサンプルをSTLで作りゃったーしたったわ、
https://ideone.com/bS7rqc
↓ここのC#のサンプルプログラムの移植
// https://atmarkit.itmedia.co.jp/ait/articles/1801/31/news023.html
フラグの必要性は意味を取り違えていたわサーセン、
しかしこれフラグ(runningFlag)無しでやるとしたら終了時にConsumerがいちいちProducerが
join可能か調べる(std::thread::joinable())ことになってスレッドより先にプログラムした人が終了したくなるお
フラグで済むのに、
https://ideone.com/bS7rqc
↓ここのC#のサンプルプログラムの移植
// https://atmarkit.itmedia.co.jp/ait/articles/1801/31/news023.html
フラグの必要性は意味を取り違えていたわサーセン、
しかしこれフラグ(runningFlag)無しでやるとしたら終了時にConsumerがいちいちProducerが
join可能か調べる(std::thread::joinable())ことになってスレッドより先にプログラムした人が終了したくなるお
フラグで済むのに、
2021/08/10(火) 15:21:27.23ID:W7aMf5pX
Windowsのイベントオブジェクトと条件変数の違いまとめ
https://dev.activebasic.com/egtra/2011/09/19/413/
https://dev.activebasic.com/egtra/2011/09/19/413/
2021/08/10(火) 15:28:07.54ID:W7aMf5pX
と思ったがやっぱ当初の意味(Producerが待っているのかどうか)のフラグが無いと、
キューが空になった後のnotifyで、1万個あるかもしれない仕事の無いConsumerが次々起床され、
巡り巡ってようやくProducerが起床されるみたいな非効率が生じる余地があるやんけ;;;
やっぱ当初の漏れのフラグ必要という意見で正しかったのかもしんない
漏れは天才なのかもしんない、
かもしんない運転、
キューが空になった後のnotifyで、1万個あるかもしれない仕事の無いConsumerが次々起床され、
巡り巡ってようやくProducerが起床されるみたいな非効率が生じる余地があるやんけ;;;
やっぱ当初の漏れのフラグ必要という意見で正しかったのかもしんない
漏れは天才なのかもしんない、
かもしんない運転、
2021/08/10(火) 18:25:35.80ID:W7aMf5pX
つかその前に、漏れの天才eyesが改造元とした@IT様のサンプルプログラムに
スレッドのディスパッチ依存で終了できなくなることがあるという恥ずかしいバグを発見した、
論より証拠:
https://ideone.com/NbKdEQ
変更点は、Consumerを1個にして、Producerの側のある個所にsleepを入れただけ
(マクロ CAUSE_STOPPING_FAILURE_BUG で条件コンパイルで有効にしている個所
これでConsumerスレッドが終了できなくなる
対策は、同ソースコードの BUGFIX_STOPPING_FAILURE_BUG マクロを有効にしたら宜しい
天才の判断である
スレッドのディスパッチ依存で終了できなくなることがあるという恥ずかしいバグを発見した、
論より証拠:
https://ideone.com/NbKdEQ
変更点は、Consumerを1個にして、Producerの側のある個所にsleepを入れただけ
(マクロ CAUSE_STOPPING_FAILURE_BUG で条件コンパイルで有効にしている個所
これでConsumerスレッドが終了できなくなる
対策は、同ソースコードの BUGFIX_STOPPING_FAILURE_BUG マクロを有効にしたら宜しい
天才の判断である
2021/08/10(火) 18:42:35.68ID:mYAwPqTL
>>34
すみません。この件なんですが、
void operator += (int n){
if(n == 1){
// ここ
}else{
……
}
}
「ここ」で演算子++を呼びたいときってどう書いたら良いでしょうか
++の中身をコピペしても良いのですが、
this -> ++
みたいなノリで呼び出せた方が都合が良いです
すみません。この件なんですが、
void operator += (int n){
if(n == 1){
// ここ
}else{
……
}
}
「ここ」で演算子++を呼びたいときってどう書いたら良いでしょうか
++の中身をコピペしても良いのですが、
this -> ++
みたいなノリで呼び出せた方が都合が良いです
2021/08/10(火) 19:06:35.71ID:W7aMf5pX
というわけで最終的な版を貼る、
https://ideone.com/G3XeAg
ProduceとConsumerそれぞれに対する起床条件を分離すた、
日本語ではいくら説明しても一向に理解の光が射さなかったボンクラ学生レヴェルの>>15でも
100行足らずのソースコードなら読めるんじゃないの
知らんけど
https://ideone.com/G3XeAg
ProduceとConsumerそれぞれに対する起床条件を分離すた、
日本語ではいくら説明しても一向に理解の光が射さなかったボンクラ学生レヴェルの>>15でも
100行足らずのソースコードなら読めるんじゃないの
知らんけど
2021/08/10(火) 19:11:32.09ID:cMFKuo8t
2021/08/10(火) 19:24:28.15ID:mYAwPqTL
2021/08/10(火) 19:37:16.72ID:Lbev+Y0v
>>40
で、そこで取れると良い「スレッドの実行状態」って結局何なん?
で、そこで取れると良い「スレッドの実行状態」って結局何なん?
2021/08/10(火) 20:32:27.09ID:W7aMf5pX
2021/08/10(火) 21:01:08.35ID:Lbev+Y0v
>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
それって具体的にどういうものを想定しているんだろう。
もともとの話はstd::threadに追加したい機能だったと思うけど、この説明だけじゃ全然想像がつかない。
それって具体的にどういうものを想定しているんだろう。
もともとの話はstd::threadに追加したい機能だったと思うけど、この説明だけじゃ全然想像がつかない。
2021/08/10(火) 22:11:54.85ID:W7aMf5pX
なんか元にしたコードにまだ問題があった気配orz
MAX_QUEを1にすると高い頻度でProducerとConsumerが両方待ちに入ってしまいハングアップする、、、
対策版は多分これ↓で良いんジャマイカ……
https://ideone.com/at7ef9
(何が起きていて、どうしてこれで対策なのかはコメント参照、
>>45
>>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
>それって具体的にどういうものを想定しているんだろう。
今回のサンプルコードでは具体的にはありません(キリ
しいて言えば!runningFlagならConsumerが自身を待ちに入れない(∵Producerがもう起こしてはくれない
というのはあるが、>>35に書いた通りフラグ以外の方法でも同じ判定を行える
言っていることにブレがあるのは今日pthreadを勉強したばっかりやし、
天才なので大目に見てホスイ、
MAX_QUEを1にすると高い頻度でProducerとConsumerが両方待ちに入ってしまいハングアップする、、、
対策版は多分これ↓で良いんジャマイカ……
https://ideone.com/at7ef9
(何が起きていて、どうしてこれで対策なのかはコメント参照、
>>45
>>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
>それって具体的にどういうものを想定しているんだろう。
今回のサンプルコードでは具体的にはありません(キリ
しいて言えば!runningFlagならConsumerが自身を待ちに入れない(∵Producerがもう起こしてはくれない
というのはあるが、>>35に書いた通りフラグ以外の方法でも同じ判定を行える
言っていることにブレがあるのは今日pthreadを勉強したばっかりやし、
天才なので大目に見てホスイ、
2021/08/10(火) 22:25:26.70ID:W7aMf5pX
でもまあコメントを読んでいただければ、pthread系のしくみだと
起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
今回はたまたま見込みでnotifyして話が通るからスレッドの実行状態を表す変数が具体的に生じなかっただけ
起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
今回はたまたま見込みでnotifyして話が通るからスレッドの実行状態を表す変数が具体的に生じなかっただけ
2021/08/10(火) 22:47:59.90ID:C0wcAbjz
すみません。
自作プログラムが特定のPCだけ同じ場所でntdll.dllのエラーで止まるのですが、何が原因と考えられるでしょうか?
他のPCでは問題無く進み、エラーを起こすPCのメモリにも異常は見つかりませんでした。
自作プログラムが特定のPCだけ同じ場所でntdll.dllのエラーで止まるのですが、何が原因と考えられるでしょうか?
他のPCでは問題無く進み、エラーを起こすPCのメモリにも異常は見つかりませんでした。
2021/08/10(火) 23:06:02.90ID:OOQ3UOoB
2021/08/10(火) 23:24:57.75ID:C0wcAbjz
ソースはすみません、ちょっと出せないです
エラーコードは0xc0000005でしま
エラーコードは0xc0000005でしま
2021/08/10(火) 23:30:51.53ID:OOQ3UOoB
はいメモリアクセス違反ですね
デバッガでがんばって調べてね
デバッガでがんばって調べてね
2021/08/10(火) 23:32:41.60ID:C0wcAbjz
あざす
53デフォルトの名無しさん
2021/08/10(火) 23:34:52.75ID:5fGESjxl 他の言語にはスレッド実行中か判定するAPIあるしstd::thread作った人達だってそのくらいのこと知ってたでしょ
boost::thread時代にそういった要望もあっただろうし
それでもあえてstd::threadにはスレッド実行中を調べる機能を付けなかった
本質的に必要な機能ではないと判断したんじゃないの?
boost::thread時代にそういった要望もあっただろうし
それでもあえてstd::threadにはスレッド実行中を調べる機能を付けなかった
本質的に必要な機能ではないと判断したんじゃないの?
2021/08/10(火) 23:44:13.15ID:rk6SLsdN
スレッドそのものの終了状態を知る需要はあまりなく、スレッド内で行われるユーザー定義処理が終わったかどうかが重要だからでしょ
2021/08/10(火) 23:50:54.98ID:Lbev+Y0v
>>47
>起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
それがwaitで待っている状態かそうでないかを意味しているんだとしたらそれは正しくない。
チェックした次の瞬間にwaitする可能性もあるわけなんで。
>起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
それがwaitで待っている状態かそうでないかを意味しているんだとしたらそれは正しくない。
チェックした次の瞬間にwaitする可能性もあるわけなんで。
2021/08/11(水) 01:24:38.33ID:qkzYmFIh
2021/08/11(水) 01:28:13.23ID:qkzYmFIh
問題だらけだった@IT様のサンプルコードだけど
これまともに実装するとしたら条件変数をConsumer x NとProducerの計N+1個設けて、
さらにConsumerそれぞれが待っているのか動いているのかを示すフラグを設けて
全部動いていたらProducerを待たせる
Consumerが待ちに入る直前にProducerにnotifyかけてキックする、みたいな
スレッドプールを手で実装するみたいな話になりそう……
でここまでやるならConsumerの状態変数が実体としてコードに現れる
これまともに実装するとしたら条件変数をConsumer x NとProducerの計N+1個設けて、
さらにConsumerそれぞれが待っているのか動いているのかを示すフラグを設けて
全部動いていたらProducerを待たせる
Consumerが待ちに入る直前にProducerにnotifyかけてキックする、みたいな
スレッドプールを手で実装するみたいな話になりそう……
でここまでやるならConsumerの状態変数が実体としてコードに現れる
2021/08/11(水) 01:44:51.77ID:01hIEDa4
何を主張したくてごちゃごちゃ言ってるのかさっぱり見えないし途中で変わったりしてるようでもあるので、
続けるならそもそもどういう主張をしているのかいっぺんまとめてほしい。
続けるならそもそもどういう主張をしているのかいっぺんまとめてほしい。
2021/08/11(水) 08:13:22.18ID:SyYdmIb8
60デフォルトの名無しさん
2021/08/11(水) 09:56:36.95ID:8ERcfmko C++ってiPhoneアプリ作れる?
2021/08/11(水) 12:11:01.26ID:sOdrsbt7
>>60
作れる。QtやUnityで。
作れる。QtやUnityで。
2021/08/11(水) 12:13:04.52ID:sOdrsbt7
iPhone専用でいいなら、そもそも、Appleが提供している標準開発環境だけでも
C++で作れる。
iPhoneの標準開発言語はSwiftだが、SwiftはC++と相互に呼び出せるから。
ただし、それだけだと面倒かも知れない。
そういう場合は、Qtで作れば。
C++で作れる。
iPhoneの標準開発言語はSwiftだが、SwiftはC++と相互に呼び出せるから。
ただし、それだけだと面倒かも知れない。
そういう場合は、Qtで作れば。
63デフォルトの名無しさん
2021/08/11(水) 12:52:41.17ID:MU7UJMps std::vector で insert するとき
v.insert(v.begin() + n, hoge);
とかすると思いますが
このときの n の型って何ですか?
int ?
unsigned long ?
size_t ?
あとこういう型を調べるときって
vector のどことか iterator のどこを調べると判りますか?
v.insert(v.begin() + n, hoge);
とかすると思いますが
このときの n の型って何ですか?
int ?
unsigned long ?
size_t ?
あとこういう型を調べるときって
vector のどことか iterator のどこを調べると判りますか?
2021/08/11(水) 13:03:37.14ID:19rzwYjH
22.3.11 Class Template vector
23.3.11.1 Overview
3
using iterator = implementation-defined; //see 22.2
となっていて、std::vector::iteratorの型は処理系定義だね
現物で調べるならVisual Studioの[F12]が簡単だと思う
23.3.11.1 Overview
3
using iterator = implementation-defined; //see 22.2
となっていて、std::vector::iteratorの型は処理系定義だね
現物で調べるならVisual Studioの[F12]が簡単だと思う
2021/08/11(水) 14:01:06.77ID:OqxISI0I
2021/08/11(水) 14:15:21.29ID:EWMgwFeS
std::thread使ったことないから自信無くて黙ってたけど
thread::joinable()って別にスレッドが終了したかの判定ではなくない?
他スレッドでの実行を管理していない状態の(空の)オブジェクトが作れるから、そういう空の状態かどうかの判定関数であるように読めた
fstream::is_open()的な……
thread::joinable()って別にスレッドが終了したかの判定ではなくない?
他スレッドでの実行を管理していない状態の(空の)オブジェクトが作れるから、そういう空の状態かどうかの判定関数であるように読めた
fstream::is_open()的な……
2021/08/11(水) 14:23:39.88ID:01hIEDa4
>>63
暗黙変換があるから n の型としてはすべての整数型があり得る。
基本的には、生ポインタで実装される可能性もあるものなので ptrdiff_t だと思っておけばいい。
正確な型が必要なら difference_type とか iter_difference_t とかで調べればわかる。
暗黙変換があるから n の型としてはすべての整数型があり得る。
基本的には、生ポインタで実装される可能性もあるものなので ptrdiff_t だと思っておけばいい。
正確な型が必要なら difference_type とか iter_difference_t とかで調べればわかる。
2021/08/11(水) 14:56:54.71ID:OqxISI0I
69デフォルトの名無しさん
2021/08/11(水) 15:08:15.20ID:MU7UJMps2021/08/11(水) 15:28:09.46ID:EWMgwFeS
2021/08/11(水) 15:29:37.31ID:EWMgwFeS
>>69
v.begin().operator+(n)とでも書き換えてoperator+で[F12]しろということではなかろうか
v.begin().operator+(n)とでも書き換えてoperator+で[F12]しろということではなかろうか
72はちみつ餃子 ◆8X2XSCHEME
2021/08/11(水) 15:43:43.66ID:QcAq7ivU >>69
ランダムアクセスイテレータには difference_type (またはそれに暗黙に型変換出来る何か) を足すことができて、
その結果の型はイテレータ自身と同じ。
https://timsong-cpp.github.io/cppwp/n3337/random.access.iterators
ランダムアクセスイテレータには difference_type (またはそれに暗黙に型変換出来る何か) を足すことができて、
その結果の型はイテレータ自身と同じ。
https://timsong-cpp.github.io/cppwp/n3337/random.access.iterators
2021/08/11(水) 15:52:06.26ID:SyYdmIb8
2021/08/11(水) 15:54:21.05ID:19rzwYjH
>>71
そういうこと
そういうこと
75デフォルトの名無しさん
2021/08/13(金) 02:38:58.72ID:tLa9gek2 char *mystrcat(char *a, char *b)
{
// a に b を結合して
return a;
}
みたいな関数を
shared_ptr<char *> mystrcat(shared_ptr<char *> a, char *b)
{
// a に b を結合して
return a;
}
みたいな実装にするとき参照カウンタが無限に増える心配はありますか?
shared_ptr<char *> mystrcat(weak_ptr<char *> a, char *b)
の方が良いのでしょうか?
あと
hoge = mystrcat(NULL, hage); みたいに使用されるときは
mystrcat の中で new してコピーして new したポインタを返したいのですが問題ありませんか?
{
// a に b を結合して
return a;
}
みたいな関数を
shared_ptr<char *> mystrcat(shared_ptr<char *> a, char *b)
{
// a に b を結合して
return a;
}
みたいな実装にするとき参照カウンタが無限に増える心配はありますか?
shared_ptr<char *> mystrcat(weak_ptr<char *> a, char *b)
の方が良いのでしょうか?
あと
hoge = mystrcat(NULL, hage); みたいに使用されるときは
mystrcat の中で new してコピーして new したポインタを返したいのですが問題ありませんか?
2021/08/13(金) 02:56:15.88ID:nopi39s7
>>75
shared_ptr<char *> だと、たぶんやりたいことはできてない。
shared_ptr<char[]> の間違いなんだろうと思うけど、この時点でコンパイルすら試してないのが見て取れる。
参照カウンタの動きは挙げられたソースだけじゃ読み取れないけど、無限に増えるなんてことはまず起こらない。
shared_ptr の use_count() で取れるから試してみればいい。
問題があるかどうかも自分で試してみればいい。何を「問題」とするかこちらにはわからないし。
shared_ptr<char *> だと、たぶんやりたいことはできてない。
shared_ptr<char[]> の間違いなんだろうと思うけど、この時点でコンパイルすら試してないのが見て取れる。
参照カウンタの動きは挙げられたソースだけじゃ読み取れないけど、無限に増えるなんてことはまず起こらない。
shared_ptr の use_count() で取れるから試してみればいい。
問題があるかどうかも自分で試してみればいい。何を「問題」とするかこちらにはわからないし。
2021/08/13(金) 09:51:25.31ID:BE9FMbqU
個別の事例で心配ない、問題ないという返答を得たとしても理解が深まらない。
shared_ptr のメカニズムを理解できないと何度でも心配になるだけ。
どういう理屈で参照カウンタが無限に増えると思ったのかを説明してみて。
考え方に間違いがあれば指摘するよ。
shared_ptr のメカニズムを理解できないと何度でも心配になるだけ。
どういう理屈で参照カウンタが無限に増えると思ったのかを説明してみて。
考え方に間違いがあれば指摘するよ。
2021/08/13(金) 11:40:57.21ID:UG8FRdqC
char *mystrcat(char *a, char *b)
{
// a に b を結合して
return make_shared<char []>(a);
}
じゃいかんの
しらんけど
{
// a に b を結合して
return make_shared<char []>(a);
}
じゃいかんの
しらんけど
2021/08/13(金) 14:30:41.36ID:vEVo7A6C
適当な質問者と適当な回答者
ゴミとゴミをあわせてもゴミはゴミ
ゴミとゴミをあわせてもゴミはゴミ
2021/08/13(金) 18:27:35.00ID:tLa9gek2
shared_ptr<char []> c(a);
return &c[0];
return &c[0];
2021/08/14(土) 08:57:21.71ID:dlgzlAXX
namespaceってどのように使うものなんですか?
存在意義がわからない。
存在意義がわからない。
2021/08/14(土) 09:56:52.00ID:2Gpa2MRC
>>81
大規模ライブラリを設計するときに重宝する機能
詳しい経緯は知らないがグローバルスコープの識別子名の競合を回避する目的で導入されたと思う
namespaceがないC言語時代にいくつからの大規模ライブラリを組み合わせたときに何が起きがちだったか知っていれば納得出来るはず
どんな機能もそうだが、自分が必要と思った時に使えば良いだけだよ
存在意義が分からないならお前にとっては必要のない機能ということだから、気にする必要はない
大規模ライブラリを設計するときに重宝する機能
詳しい経緯は知らないがグローバルスコープの識別子名の競合を回避する目的で導入されたと思う
namespaceがないC言語時代にいくつからの大規模ライブラリを組み合わせたときに何が起きがちだったか知っていれば納得出来るはず
どんな機能もそうだが、自分が必要と思った時に使えば良いだけだよ
存在意義が分からないならお前にとっては必要のない機能ということだから、気にする必要はない
2021/08/14(土) 10:45:32.18ID:MjnqNUAd
Cにnamespaceが導入されないのは何故なんです?
2021/08/14(土) 10:48:18.77ID:isR1pnnS
2021/08/14(土) 11:05:20.03ID:HmVXtcJk
>>83
namespace
namespace
2021/08/14(土) 11:07:32.50ID:HmVXtcJk
>>83
namespaceを導入するということは :: だのマングリングだのADLだの色々付いてくるからな
namespaceを導入するということは :: だのマングリングだのADLだの色々付いてくるからな
2021/08/14(土) 11:09:29.69ID:sh47n3w4
>>83
マングリングが必要になってしまうから、ってのが大きいだろうな。
マングリングが必要になってしまうから、ってのが大きいだろうな。
88デフォルトの名無しさん
2021/08/14(土) 11:16:28.29ID:Wd8wuOU/ C++を本格的に学ぼうと思って本を数冊買ったが、言語仕様が複雑な割には知らないとエラー起こすだろ
っていう項目が多くてビビってる。あと、きれいなコードを書くのに尋常じゃない経験が必要なんじゃないか
っていう項目が多くてビビってる。あと、きれいなコードを書くのに尋常じゃない経験が必要なんじゃないか
89はちみつ餃子 ◆8X2XSCHEME
2021/08/14(土) 11:34:44.96ID:xM4RG8+9 全部知らなくてもわかる部分だけでまあまあ使えるというのが C++ の方針なので
最初から綺麗に書こうと思わないほうがいいと思う。
綺麗に書けないと考えるより汚くても普通なんだと考えると気が楽でしょ。
最初から綺麗に書こうと思わないほうがいいと思う。
綺麗に書けないと考えるより汚くても普通なんだと考えると気が楽でしょ。
2021/08/14(土) 11:41:20.52ID:HmVXtcJk
構造体の中に関数が書ける、というコアの中のコアな部分の使い方・考え方さえ憶えるというより慣れれば
あと他のは追加で憶えればいいってだけ
ただし、その追加が今とんでもない量になってて
禿本の初版からやってる俺でさえ憶えきれなくてもがいてる
あと他のは追加で憶えればいいってだけ
ただし、その追加が今とんでもない量になってて
禿本の初版からやってる俺でさえ憶えきれなくてもがいてる
2021/08/14(土) 11:47:19.11ID:fhp8ilcT
いいかい学生さん、 他人のコードをな、 他人のコードをいつでも読めるくらいになりなよ。
それが、人間えら過ぎもしない貧乏過ぎもしない、 ちょうどいいくらいってとこなんだ。
それが、人間えら過ぎもしない貧乏過ぎもしない、 ちょうどいいくらいってとこなんだ。
2021/08/14(土) 13:15:40.19ID:MjnqNUAd
2021/08/14(土) 13:23:47.33ID:sh47n3w4
他人のコードを読んで学ぶのに一番向いてない言語だよなC++は。
2021/08/14(土) 13:48:08.91ID:fhp8ilcT
オーバーロードが悪いんですよ
2021/08/14(土) 14:19:07.48ID:EcmTnCEO
>>93
perl に比べたらまだマシ
perl に比べたらまだマシ
2021/08/14(土) 17:38:14.88ID:sh47n3w4
perlは文法が複雑なだけで、知らない書き方に出会ったらそれを調べればいい。
C++はコードの断片だけ見ても動作を想像できないことがあるから厄介。
C++はコードの断片だけ見ても動作を想像できないことがあるから厄介。
2021/08/14(土) 18:45:25.98ID:lbIZmRLc
ぶっちゃけスマートポインターって面倒だよね?
2021/08/14(土) 18:54:41.75ID:fhp8ilcT
スマポに限らず面倒なテンプレートクラスだらけだよ
2021/08/14(土) 18:56:25.80ID:fRH2bKcn
ぶっちゃけどんなときに面倒だと感じる?
100デフォルトの名無しさん
2021/08/14(土) 19:58:29.67ID:x6Wgppy9 スマートポインタに慣れたら自分で解放しなきゃならないmallocやnewの方がよっぽど面倒
101デフォルトの名無しさん
2021/08/14(土) 20:04:27.45ID:HmVXtcJk >>98
クラステンプレートな
クラステンプレートな
102デフォルトの名無しさん
2021/08/14(土) 21:41:33.25ID:fhp8ilcT autoが便利すぎて反復子の型を明示していたころのC++には戻れそうにない
103デフォルトの名無しさん
2021/08/14(土) 22:18:40.56ID:cML6JT7R 11よりは前は書きたくないね
104デフォルトの名無しさん
2021/08/15(日) 00:20:00.85ID:YeWgyy60 QZ案外初心者やなw
でも言ってることは全面的に賛成
ポインタや参照、クラス等の基本を抑えてからでないとスマポや、C++11からの要素(右辺値参照含む)の使い方もわからんと思う
でも言ってることは全面的に賛成
ポインタや参照、クラス等の基本を抑えてからでないとスマポや、C++11からの要素(右辺値参照含む)の使い方もわからんと思う
105デフォルトの名無しさん
2021/08/15(日) 06:30:24.80ID:AkVzvB4L autoもそうだが ->戻り型やusingエイリアスもだね
typedefには戻れない
typedefには戻れない
106ハノン ◆QZaw55cn4c
2021/08/15(日) 09:34:41.47107デフォルトの名無しさん
2021/08/15(日) 14:37:33.11ID:Qb5ISoeo >>104
なにこれ?
QZ「〜」
名無し「QZ初心者やな。でも賛成」
っていう自演をやろうとしたが、一個目のQZのレスをコテつけ忘れで投稿してしまったのか?
あるいははちみつとQZを同一視している?
いずれにせよとんでもない皮肉だな笑
なにこれ?
QZ「〜」
名無し「QZ初心者やな。でも賛成」
っていう自演をやろうとしたが、一個目のQZのレスをコテつけ忘れで投稿してしまったのか?
あるいははちみつとQZを同一視している?
いずれにせよとんでもない皮肉だな笑
109デフォルトの名無しさん
2021/08/15(日) 17:48:49.44ID:pJ9UilRh >>107
それ、以前俺が書いたカキコを勝手にコピペされただけだよ
それ、以前俺が書いたカキコを勝手にコピペされただけだよ
110デフォルトの名無しさん
2021/08/15(日) 17:52:57.61ID:/OoKg6VD クッソささやかな体面保つためだけの自演も失敗とか本当にみじめないきものだな…
111デフォルトの名無しさん
2021/08/15(日) 18:00:11.34ID:/ZNLC/hj これか。どういう意図のコピペなんだろうかね。
https://mevius.5ch.net/test/read.cgi/tech/1594615908/595
https://mevius.5ch.net/test/read.cgi/tech/1594615908/595
112はちみつ餃子 ◆8X2XSCHEME
2021/08/15(日) 18:12:10.32ID:oR5NZ4bd113デフォルトの名無しさん
2021/08/15(日) 18:15:56.65ID:pJ9UilRh114はちみつ餃子 ◆8X2XSCHEME
2021/08/15(日) 18:21:10.51ID:oR5NZ4bd115デフォルトの名無しさん
2021/08/15(日) 18:25:05.27ID:pJ9UilRh (´・ω・`)そうか
116デフォルトの名無しさん
2021/08/16(月) 15:03:34.95ID:Gh+OcB3l >>107
なんで突然はちみつ?
なんで突然はちみつ?
117はちみつ餃子 ◆8X2XSCHEME
2021/08/16(月) 15:17:56.99ID:5E5Krdno >>116
現時点でこのスレにコテ (+トリップ) 付きで書き込んでいるのがはちみつ餃子と QZ だけだからだろ。
現時点でこのスレにコテ (+トリップ) 付きで書き込んでいるのがはちみつ餃子と QZ だけだからだろ。
118デフォルトの名無しさん
2021/08/16(月) 19:18:38.03ID:QgSHgEhC (unsigned) intの数を受けたら何らかの演算をして (unsigned) long longの数を返す、(unsigned) double の数を受けたら何らかの演算をして (unsigned) long double の数を返す、みたいのって逐一オーバーロードを書くしかないですよね?
要するに、大きいデータ型に格上げして何らかの演算をして返したいってことなんですが
要するに、大きいデータ型に格上げして何らかの演算をして返したいってことなんですが
119ハノン ◆QZaw55cn4c
2021/08/16(月) 19:34:40.64120デフォルトの名無しさん
2021/08/16(月) 19:55:44.02ID:AiYiQHL1 引数をテンプレートにして、引数Tのビット数と整数型かどうかを見て、一段階大きい型を戻り値の型とすることは出来る
122デフォルトの名無しさん
2021/08/16(月) 21:59:33.60ID:AiYiQHL1 ごめん、めんどい・・というか
sizeof(T)と整数or浮動小数点数のbool(is_integralとかで取る)を受け取る構造体の中でtype(戻り値の型)を定義、とか考えてたけど
結局Tのサイズごとに特殊化するから手間変わらん、てのと
関数の中身が長くなるなら、オーバーロードした関数からテンプレート版(戻り値の型と引数の型がテンプレート)を呼んで、そこで中身書けば一回で済むね
sizeof(T)と整数or浮動小数点数のbool(is_integralとかで取る)を受け取る構造体の中でtype(戻り値の型)を定義、とか考えてたけど
結局Tのサイズごとに特殊化するから手間変わらん、てのと
関数の中身が長くなるなら、オーバーロードした関数からテンプレート版(戻り値の型と引数の型がテンプレート)を呼んで、そこで中身書けば一回で済むね
123デフォルトの名無しさん
2021/08/16(月) 23:40:17.97ID:cwTPPWgm >>118
ふつうに long long や long double を引数で受け取るって演算して返す関数を書けば
その通りの動作になりそうなんだけど、何か気に入らないの?
2つ関数書くのが嫌だってこと?(やりたいことが少なくとも2通りあるのに?)
ふつうに long long や long double を引数で受け取るって演算して返す関数を書けば
その通りの動作になりそうなんだけど、何か気に入らないの?
2つ関数書くのが嫌だってこと?(やりたいことが少なくとも2通りあるのに?)
124はちみつ餃子 ◆8X2XSCHEME
2021/08/17(火) 00:20:49.88ID:yPn/BtRt 大きい型というのは一段階大きい型という意味なのかな?
型の大きさは処理系 (アーキテクチャ) 依存だし、
ポータブルに書こうと思ったら思ったよりも面倒な感じ。
主要なアーキテクチャだけ対処できればいいなら
8 → 16 → 32 → 64
の拡張が出来ればいいので用意するパターンはそんなに多くはない。
ちなみに Windows の long double は double と同じ大きさだよ。
型の大きさは処理系 (アーキテクチャ) 依存だし、
ポータブルに書こうと思ったら思ったよりも面倒な感じ。
主要なアーキテクチャだけ対処できればいいなら
8 → 16 → 32 → 64
の拡張が出来ればいいので用意するパターンはそんなに多くはない。
ちなみに Windows の long double は double と同じ大きさだよ。
125デフォルトの名無しさん
2021/08/17(火) 02:08:49.72ID:rNAqXouz 何種類か関数があるならtraitsを作成するのもありじゃない?
126デフォルトの名無しさん
2021/08/18(水) 04:11:58.97ID:ReVsRUuR 関数読んだら1段階デカい型が返ってくるなんて使う側でも面倒が起きそうだな
127デフォルトの名無しさん
2021/08/18(水) 04:23:43.76ID:TZ94eDdV まぁ、戻り値にも使用できるテンプレートの追加の型を関数内でconstexpr的に定義出来たらいろいろ面白いことが出来そうではあるなw
128デフォルトの名無しさん
2021/08/19(木) 15:14:48.98ID:9cCAU3aU 話は勝手に変わるけど、
{ 1,2,3,4,5 }
のような書き方が initializer_list になる場合とならない場合を全て知りたいけど
良く分からないので、誰か教えてくれまいか。
{ 1,2,3,4,5 }
のような書き方が initializer_list になる場合とならない場合を全て知りたいけど
良く分からないので、誰か教えてくれまいか。
129デフォルトの名無しさん
2021/08/19(木) 15:21:14.80ID:9cCAU3aU >>128
的を外しているかも知れないけど、その書き方をAと書くとすると、どんな文脈でも
A自体が最初に必ずいったん initializer_list<T> になった後にそれぞれの文脈で処理されるという
ことなのか、あるいは、
auto x {・・・};
auto x = {・・・};
auto x = TYPE {・・・};
func({・・・});
のようにいろいろな書き方や文脈が変わるとそもそも A は意味論的にすら
initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される
のか、どちらなんだろう????
的を外しているかも知れないけど、その書き方をAと書くとすると、どんな文脈でも
A自体が最初に必ずいったん initializer_list<T> になった後にそれぞれの文脈で処理されるという
ことなのか、あるいは、
auto x {・・・};
auto x = {・・・};
auto x = TYPE {・・・};
func({・・・});
のようにいろいろな書き方や文脈が変わるとそもそも A は意味論的にすら
initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される
のか、どちらなんだろう????
130デフォルトの名無しさん
2021/08/19(木) 15:24:22.53ID:9cCAU3aU あと、良く分からないのが、
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)が呼び出されるのだろうか?
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)が呼び出されるのだろうか?
131はちみつ餃子 ◆8X2XSCHEME
2021/08/19(木) 16:38:31.07ID:z/GAGLjl >>129
> initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される
initializer_list を経由しないことはある。
おおざっぱには initializer_list を受け取る文脈では initializer_list だし、
推論が必要なとき (auto やテンプレート) にも initializer_list に推論されるが、
そうでないときは initializer_list を経由しない。
> initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される
initializer_list を経由しないことはある。
おおざっぱには initializer_list を受け取る文脈では initializer_list だし、
推論が必要なとき (auto やテンプレート) にも initializer_list に推論されるが、
そうでないときは initializer_list を経由しない。
132はちみつ餃子 ◆8X2XSCHEME
2021/08/19(木) 16:48:40.83ID:z/GAGLjl >>130
優先順位がある。
1. 2. 3. のいずれも initializer_list としての解釈が「優先される」。
initializer_list を受け取るコンストラクタが存在しなければ
三引数のコンストラクタが呼出される。
優先順位がある。
1. 2. 3. のいずれも initializer_list としての解釈が「優先される」。
initializer_list を受け取るコンストラクタが存在しなければ
三引数のコンストラクタが呼出される。
133デフォルトの名無しさん
2021/08/19(木) 16:54:44.67ID:9cCAU3aU >>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 を受け取るコンストラクタでも受け取ることは不可能??
なるほど。確認だけど、
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 を受け取るコンストラクタでも受け取ることは不可能??
134はちみつ餃子 ◆8X2XSCHEME
2021/08/19(木) 17:08:54.15ID:z/GAGLjl >>133
(initializer_list を受け取るコンストラクタが無ければ) いずれも 3 引数のコンストラクタが起動されるが、
5. は 3 引数のコンストラクタでオブジェクトを構築した上で a にコピーする。
(コピーコンストラクタ、またはムーブコンストラクタが起動する。)
ただし RVO が有効な状況ではコピーやムーブはが省略されるので 5. は 4. と同じ。
そしてこの場合には関係ないが、波括弧によるコンストラクタ起動では引数の暗黙の型変換を許さない
といった重要な違いがある。
(initializer_list を受け取るコンストラクタが有る状況でも) 4. と 5. は initializer_list とは解釈されない。
(initializer_list を受け取るコンストラクタが無ければ) いずれも 3 引数のコンストラクタが起動されるが、
5. は 3 引数のコンストラクタでオブジェクトを構築した上で a にコピーする。
(コピーコンストラクタ、またはムーブコンストラクタが起動する。)
ただし RVO が有効な状況ではコピーやムーブはが省略されるので 5. は 4. と同じ。
そしてこの場合には関係ないが、波括弧によるコンストラクタ起動では引数の暗黙の型変換を許さない
といった重要な違いがある。
(initializer_list を受け取るコンストラクタが有る状況でも) 4. と 5. は initializer_list とは解釈されない。
135デフォルトの名無しさん
2021/08/19(木) 17:14:28.81ID:9cCAU3aU >>134
1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能?
4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??
については?
1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能?
4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??
については?
137デフォルトの名無しさん
2021/08/19(木) 17:21:53.70ID:9cCAU3aU >>136
すまん。もう一度明言してくれるとありがたい。
すまん。もう一度明言してくれるとありがたい。
138デフォルトの名無しさん
2021/08/19(木) 17:27:44.09ID:td+NCu9W template <int N> void test(std::bitset<N>& arg);
int main()
{
std::bitset<1ull> lvalue;
test(lvalue);
}
これ、Nが推定できないのはなんで?
int main()
{
std::bitset<1ull> lvalue;
test(lvalue);
}
これ、Nが推定できないのはなんで?
139デフォルトの名無しさん
2021/08/19(木) 17:28:31.68ID:td+NCu9W すまん、自己解決
unsigned long long Nが正解だった
unsigned long long Nが正解だった
140はちみつ餃子 ◆8X2XSCHEME
2021/08/19(木) 17:30:02.71ID:z/GAGLjl141はちみつ餃子 ◆8X2XSCHEME
2021/08/19(木) 17:33:59.90ID:z/GAGLjl142デフォルトの名無しさん
2021/08/19(木) 17:40:36.29ID:9cCAU3aU143デフォルトの名無しさん
2021/08/19(木) 22:54:32.78ID:CH0dz2ka vector<long long>を取る関数にvector<int>を渡すと、その引数はvector<long long>にキャストされる
で、vector<int>を取る関数にvector<long long>を渡すのはNG
この理解は合ってますでしょうか
で、vector<int>を取る関数にvector<long long>を渡すのはNG
この理解は合ってますでしょうか
144デフォルトの名無しさん
2021/08/19(木) 23:03:24.64ID:/B0HDd6y 間違ってる
vector<long long>とvector<int>には何の関係もない
intとstringに関係がないのと同じくらい関係ない
vector<long long>とvector<int>には何の関係もない
intとstringに関係がないのと同じくらい関係ない
145デフォルトの名無しさん
2021/08/20(金) 11:13:55.26ID:5K/SmrCp pair<int, int> は pair<long long, long long>にキャストできるけど
vectorにそういうコンストラクタはないな
vectorにそういうコンストラクタはないな
146デフォルトの名無しさん
2021/08/20(金) 12:13:09.91ID:ssGfr3Zr147デフォルトの名無しさん
2021/08/20(金) 12:42:32.36ID:5K/SmrCp 例外処理が2系統、数え方によっては3系統あるのがね
148デフォルトの名無しさん
2021/08/20(金) 15:19:34.50ID:Pb4opnB5 STOUT を STDOUT に空目してこそプログラマ脳
「ミロ」そっくりの缶ビール 子どもが誤飲し販売禁止に(豪) - Yahoo! JAPAN
https://article.yahoo.co.jp/detail/1a7b2e0b9ab108ebf156f22e654f60634c39c88b
子どものみならず大人にも大人気のココア味の麦芽飲料「ミロ」は、世界中で愛されている。このほどオーストラリアの企業が、
ミロにそっくりのパッケージデザインで缶ビールを製造したことにより「子どもが間違えて飲んでしまった」という苦情が届いた。
これにより同製品の広告使用禁止が言い渡されたことを『news.com.au』などが伝えている。
問題の缶ビールは、豪ビクトリア州にある企業「Howler Brewing Company」の「Chocolate Milk Stout」というチョコレート風味の黒ビールだ。
缶のデザインは有名な麦芽飲料「ミロ」を真似たもので、お馴染みの緑色を背景に製品名や販売会社を示す文字の色やフォントまで同じデザインとなっている。
同社はこれまでにも、Instagramや炭酸飲料「スプライト」など認知度の高いロゴデザインを真似た製品を作り出している。
「ミロ」そっくりの缶ビール 子どもが誤飲し販売禁止に(豪) - Yahoo! JAPAN
https://article.yahoo.co.jp/detail/1a7b2e0b9ab108ebf156f22e654f60634c39c88b
子どものみならず大人にも大人気のココア味の麦芽飲料「ミロ」は、世界中で愛されている。このほどオーストラリアの企業が、
ミロにそっくりのパッケージデザインで缶ビールを製造したことにより「子どもが間違えて飲んでしまった」という苦情が届いた。
これにより同製品の広告使用禁止が言い渡されたことを『news.com.au』などが伝えている。
問題の缶ビールは、豪ビクトリア州にある企業「Howler Brewing Company」の「Chocolate Milk Stout」というチョコレート風味の黒ビールだ。
缶のデザインは有名な麦芽飲料「ミロ」を真似たもので、お馴染みの緑色を背景に製品名や販売会社を示す文字の色やフォントまで同じデザインとなっている。
同社はこれまでにも、Instagramや炭酸飲料「スプライト」など認知度の高いロゴデザインを真似た製品を作り出している。
149デフォルトの名無しさん
2021/08/20(金) 17:52:50.79ID:BMARPdQo 関数オブジェクトじゃなくて関数を記述するメリットってなんかある?
テンプレートは近々関数オブジェクトの方でも使えるようになるんでしょ?
テンプレートは近々関数オブジェクトの方でも使えるようになるんでしょ?
150デフォルトの名無しさん
2021/08/20(金) 19:08:22.19ID:n19OoAH+ >>149
タイプ数が少ない、くらいかね。
タイプ数が少ない、くらいかね。
151デフォルトの名無しさん
2021/08/20(金) 20:12:20.52ID:BMARPdQo >>150
じゃあそのうち「関数はレガシーな書き方なので関数オブジェクトを使用するようにしましょう」とか言われるようになるの?
じゃあそのうち「関数はレガシーな書き方なので関数オブジェクトを使用するようにしましょう」とか言われるようになるの?
152デフォルトの名無しさん
2021/08/21(土) 00:32:59.41ID:E2GGZp0E153デフォルトの名無しさん
2021/08/21(土) 00:37:37.24ID:E2GGZp0E154デフォルトの名無しさん
2021/08/21(土) 00:45:38.19ID:E2GGZp0E あ、すまんラムダじゃなくて関数オブジェクトか
確かにタイプ数くらいしか思いつかんけど
テンプレートは既に使えるのでは?関数テンプレートに出来て関数オブジェクトに出来ないテンプレートの使い方あったっけ
確かにタイプ数くらいしか思いつかんけど
テンプレートは既に使えるのでは?関数テンプレートに出来て関数オブジェクトに出来ないテンプレートの使い方あったっけ
155デフォルトの名無しさん
2021/08/21(土) 10:46:43.63ID:+K/WXdke156デフォルトの名無しさん
2021/08/21(土) 12:15:51.53ID:t0h3aTQf157デフォルトの名無しさん
2021/08/21(土) 13:42:38.53ID:E2GGZp0E クラステンプレート内の普通のoperator ()だとそうだね
operator ()がテンプレートの場合ならほぼ関数テンプレートと同じ事出来るとは思うけど
文法上、明示的にテンプレート引数指定する際、関数と共通の書き方には出来ないな・・
operator ()がテンプレートの場合ならほぼ関数テンプレートと同じ事出来るとは思うけど
文法上、明示的にテンプレート引数指定する際、関数と共通の書き方には出来ないな・・
158デフォルトの名無しさん
2021/08/21(土) 20:47:50.56ID:7GAoG1Iq Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しでView types参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、Cのソースコードを吐き出せるのでC言語でリモートワークされ
ている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しでView types参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、Cのソースコードを吐き出せるのでC言語でリモートワークされ
ている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
159デフォルトの名無しさん
2021/08/21(土) 22:35:53.53ID:o/sUihIV 質問です。
std::array ary = { 1, 2 };
↑の{}で初期化すると、
要素数を自動推論できるようにするにはどう実装すればいいんでしょう?
std::array ary = { 1, 2 };
↑の{}で初期化すると、
要素数を自動推論できるようにするにはどう実装すればいいんでしょう?
160デフォルトの名無しさん
2021/08/21(土) 22:55:48.18ID:+FOhqLVw161デフォルトの名無しさん
2021/08/22(日) 01:17:33.04ID:maGRuunL >>155
食ったところで飲みこまずにペッペッて吐き出すだろ
食ったところで飲みこまずにペッペッて吐き出すだろ
162デフォルトの名無しさん
2021/08/22(日) 04:31:26.04ID:Roj0wExz g++ -std=c++17
163デフォルトの名無しさん
2021/08/22(日) 12:59:29.57ID:0Cz6ueFz Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
164デフォルトの名無しさん
2021/08/22(日) 18:45:30.76ID:gNvESTNy std::chrono::time_point::time_since_epoch()が返すエポックタイムの原点はいつですか?
もし具体的に規定されていないとしても、
ミリ秒パートが0であることは保証されていますか?
もし具体的に規定されていないとしても、
ミリ秒パートが0であることは保証されていますか?
165デフォルトの名無しさん
2021/08/22(日) 19:20:25.99ID:gNvESTNy ある意味自己解決しますた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が保証されているのかどうかがはっきりしませんぬ、
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が保証されているのかどうかがはっきりしませんぬ、
166デフォルトの名無しさん
2021/08/22(日) 19:28:39.82ID:VeL/IzCV 生年月日をUNIX時間で表現できないオッサンはこのスレにどのくらいいるの?
167デフォルトの名無しさん
2021/08/22(日) 21:27:04.43ID:gNvESTNy 生年月日ならミリ秒まで言える必要は無いが
ログの時刻を極力正確に(WindowsのGetLocalTime()と同じ時刻で)記録したいのでつ∀`;)
ログの時刻を極力正確に(WindowsのGetLocalTime()と同じ時刻で)記録したいのでつ∀`;)
168デフォルトの名無しさん
2021/08/23(月) 04:13:32.16ID:F733kpwr 1970年以前生まれの50代以上のオッサン
169デフォルトの名無しさん
2021/08/23(月) 16:50:49.24ID:Rrt4HCug B.C.
A.D.
B.E.
A.D.
B.E.
170デフォルトの名無しさん
2021/08/23(月) 22:05:26.78ID:xWEF4I0D B.E.って何ですか
UCとSEとかRCとかじゃないの
UCとSEとかRCとかじゃないの
171デフォルトの名無しさん
2021/08/23(月) 22:52:48.51ID:xWEF4I0D ていうかsystem_clockはC++17以前からtime_tと相互変換できるのに(system_clock::from_time_t()、system_clock::to_time_t())、
エポックがどの時間を指しているかは未規定とかおかしくね↑?
エポックがどの時間を指しているかは未規定とかおかしくね↑?
172デフォルトの名無しさん
2021/08/23(月) 23:20:43.35ID:AuTnTHJo 別におかしくない
変換時にエポックの差の分ずらせばいいだけだろ
変換時にエポックの差の分ずらせばいいだけだろ
173デフォルトの名無しさん
2021/08/23(月) 23:31:13.03ID:sPTJEjpv そんなことよりなんでtime_tは符号なしなん?
64bit拡張するときに符号ありにしとけば166みたいな煽りを受けずにすんだのに
64bit拡張するときに符号ありにしとけば166みたいな煽りを受けずにすんだのに
174デフォルトの名無しさん
2021/08/24(火) 00:03:00.26ID:24MephMZ 符号なし使うのは総じてセンスないよね
175デフォルトの名無しさん
2021/08/24(火) 07:17:43.25ID:NEyNeI43 符号付き整数はwrap aroundしたときの挙動が処理系依存か何かだったはず……
ハードウェア例外を生じるやつがあるらしい
ハードウェア例外を生じるやつがあるらしい
176デフォルトの名無しさん
2021/08/24(火) 07:52:57.66ID:4Ohx7QuI177デフォルトの名無しさん
2021/08/24(火) 08:21:39.19ID:NErefsYh >>175
オーバーフローしたときにラップアラウンドさせる使い方が数値計算としては特殊だからねぇ。
オーバーフローしたときにラップアラウンドさせる使い方が数値計算としては特殊だからねぇ。
178デフォルトの名無しさん
2021/08/24(火) 15:27:02.85ID:WZMj7UxV >>167
ntp使え
ntp使え
179デフォルトの名無しさん
2021/08/24(火) 17:48:36.53ID:DexxKsi1180デフォルトの名無しさん
2021/08/24(火) 22:08:27.39ID:OPjw/0cg >>160
なるほど!ありがとうございます
なるほど!ありがとうございます
181167
2021/08/25(水) 00:50:22.37ID:MXKFEwSS182デフォルトの名無しさん
2021/08/25(水) 07:34:23.44ID:VHSVWUHA 30年も猶予があったのにな
183デフォルトの名無しさん
2021/08/25(水) 10:43:26.33ID:M5WZn8fZ ヒトラー「2036年、人類と云われる者は居なくなっている」
184デフォルトの名無しさん
2021/08/26(木) 16:49:35.75ID:WPRv8+9f 関東大震災だって100年も猶予があっても何もしない國ですし
185デフォルトの名無しさん
2021/08/26(木) 21:09:02.54ID:xnTAPql6 色々やってるぞ
庶民を助ける政策をやってないだけで
庶民を助ける政策をやってないだけで
186デフォルトの名無しさん
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)
最近はC++の発表資料を公開すると「Rustでいいじゃん」というコメントがたくさんつくのか…。
Rustへの言及とか一文字も書いてないのに。
普及活動だと思うけど、さすがに嫌がらせチックに見える。
https://twitter.com/moriyoshit/status/1430795812552863744
C++の件に限らず、旧来からある言語の長所短所を理解せずに、
表面的に新言語を推す発言を見ると、
果たして当人は新しい言語の方も理解できているのだろうか、
という疑念をもってしまう...
https://twitter.com/5chan_nel (5ch newer account)
187デフォルトの名無しさん
2021/08/27(金) 19:27:10.45ID:wbifwX7a >>186
Rustはいらんけど、制約を強化してコンパイルエラーを増やしたc++--は欲しいなぁ。
スライシングはすべてコンパイルエラー、ダウンキャストはメンバー関数とフレンド関数のみ使用可能
new deleteはメンバー関数とフレンド関数のみ使用可能(global operator new/deleteは廃止)
といったメモリ周りの制約強化は欲しい。
Rustはいらんけど、制約を強化してコンパイルエラーを増やしたc++--は欲しいなぁ。
スライシングはすべてコンパイルエラー、ダウンキャストはメンバー関数とフレンド関数のみ使用可能
new deleteはメンバー関数とフレンド関数のみ使用可能(global operator new/deleteは廃止)
といったメモリ周りの制約強化は欲しい。
188デフォルトの名無しさん
2021/08/28(土) 14:03:18.97ID:dCOU+NEa Rustを使って欲しいなら、そう言えばいいのに
人のすることを小馬鹿にするような態度で来るから敵と見られるんだよ
コミュ障にも程がある
人のすることを小馬鹿にするような態度で来るから敵と見られるんだよ
コミュ障にも程がある
189デフォルトの名無しさん
2021/08/28(土) 18:35:03.00ID:iJLWqDs6 インテルコンパイラの-fastには-staticが含まれてるけど、なんでスタティックリンクは速いの?
190デフォルトの名無しさん
2021/08/28(土) 18:49:01.71ID:Ovc44+68 ライブラリ使うときのロードの手間がなくなるからね
191はちみつ餃子 ◆8X2XSCHEME
2021/08/28(土) 23:41:54.59ID:V8MBAFoh スタティックリンクにすると最適化の情報が増えるというのもあると思う。
C/C++ では翻訳単位ごとにコンパイルしてからリンクするという工程を踏むから、
コンパイル時には他の翻訳単位の情報を知らず、他の翻訳単位の情報を利用した
最適化が出来なかった。
今では LTO が当たり前になって、リンク時にあらためてコンパイラに戻して最適化
させる仕組みがあるんだけど、バイナリ自体が別物だとその仕組みを使えない。
C/C++ では翻訳単位ごとにコンパイルしてからリンクするという工程を踏むから、
コンパイル時には他の翻訳単位の情報を知らず、他の翻訳単位の情報を利用した
最適化が出来なかった。
今では LTO が当たり前になって、リンク時にあらためてコンパイラに戻して最適化
させる仕組みがあるんだけど、バイナリ自体が別物だとその仕組みを使えない。
192デフォルトの名無しさん
2021/08/29(日) 13:13:16.45ID:h29TClHM std::threadってスタックサイズを指定できないってマジ?
仮想メモリを使えない組み込み用途だとどうすんじゃ……
仮想メモリを使えない組み込み用途だとどうすんじゃ……
193デフォルトの名無しさん
2021/08/29(日) 13:20:14.34ID:kSqJuAzn native_handle()関数で環境に応じたスレッドハンドル(linuxならpthread)を取得できるから、スタックサイズを設定するところだけ環境ごとに用意して切り替えればいいよ
194デフォルトの名無しさん
2021/08/29(日) 13:28:41.66ID:h29TClHM Windowsみたいにスレッドハンドルを生成したときはスタックサイズ指定済のとき、みたいな
組み込み用OSがあったらどうすんじゃ……
組み込み用OSがあったらどうすんじゃ……
195デフォルトの名無しさん
2021/08/29(日) 13:46:08.60ID:h29TClHM とわいえμITRONのcre_tsk()は
>cre_tsk でスタック領域を明示しない場合のタスクのスタックや割込みハンドラ/割込みサー
>ビスルーチンのスタックは、OS が用意する「スタック用メモリ」から割り当てられます。
>スタック用メモリのサイズを定義する STKMSZ の標準値は 0 で、この場合、main 関数が使って
>いる処理系のデフォルトのスタック領域(スタックセクション)を、OS のスタック用メモリとし
>ます。この場合の実際のスタックサイズは、リンカでのセクション設定とスタートアップルー
>チンでの初期スタックポインタ値で決まります。
みたいなことが書いてある
C/C++界隈はみんな頭おかしい……
>cre_tsk でスタック領域を明示しない場合のタスクのスタックや割込みハンドラ/割込みサー
>ビスルーチンのスタックは、OS が用意する「スタック用メモリ」から割り当てられます。
>スタック用メモリのサイズを定義する STKMSZ の標準値は 0 で、この場合、main 関数が使って
>いる処理系のデフォルトのスタック領域(スタックセクション)を、OS のスタック用メモリとし
>ます。この場合の実際のスタックサイズは、リンカでのセクション設定とスタートアップルー
>チンでの初期スタックポインタ値で決まります。
みたいなことが書いてある
C/C++界隈はみんな頭おかしい……
196デフォルトの名無しさん
2021/08/29(日) 13:55:46.65ID:h29TClHM ゴメ勘違いcre_tsk()(IDがOSが自動割り当てのやつはacre_tsk())は
第2引数に与えるT_CTSK構造体でタスクごとにスタックサイズを指定できたわ;;;
なんでstd::threadではできないんじゃ……
第2引数に与えるT_CTSK構造体でタスクごとにスタックサイズを指定できたわ;;;
なんでstd::threadではできないんじゃ……
197デフォルトの名無しさん
2021/08/29(日) 14:18:20.52ID:vSvS+48a コイツ前スレでも連レスしてたムーブ全く理解してないバカだよね?
NGしたいからトリップつけてください
NGしたいからトリップつけてください
198デフォルトの名無しさん
2021/08/29(日) 14:25:04.60ID:x8xWTwL3199デフォルトの名無しさん
2021/08/29(日) 14:30:52.45ID:AWkeWwKB >>196
ほんと組み込み屋は馬鹿だな
ほんと組み込み屋は馬鹿だな
200デフォルトの名無しさん
2021/08/29(日) 16:52:45.64ID:h29TClHM201デフォルトの名無しさん
2021/08/29(日) 16:54:56.72ID:h29TClHM もっとも天才の漏れは答えにたどりついたがな
ムーブコンの実装がコピコンの実装より効率的である保証が無い以上、
置き換え可能なケースであってもコピコンからムーブコンへの機械的置き換えは正当化されない
ムーブコンの実装がコピコンの実装より効率的である保証が無い以上、
置き換え可能なケースであってもコピコンからムーブコンへの機械的置き換えは正当化されない
202デフォルトの名無しさん
2021/08/30(月) 14:34:41.72ID:jKIf8Vzq 天才のインフレ
203デフォルトの名無しさん
2021/09/01(水) 16:43:13.53ID:Uxp79PtR Rustみたいにコンパイル時にいちいち参照のチェックするんじゃなくて
C++で最終的に完成したバイナリに対してメモリサニタイザーを一回動かす
ってのではだめな理由ある?
C++で最終的に完成したバイナリに対してメモリサニタイザーを一回動かす
ってのではだめな理由ある?
204デフォルトの名無しさん
2021/09/01(水) 20:16:57.41ID:dG55Jwur >>203 動かしたフロー以外のフローについて不安が残るし、サニタイザーの精度がどれほどかという問題もありそう。
205はちみつ餃子 ◆8X2XSCHEME
2021/09/01(水) 23:35:30.93ID:3mB0e8fG >>203
ものによって賢さの程度が違うから一概には言えないけど
基本的にはサニタイザは実際に起こった問題を検出するものなので
入力値次第で問題が有ったりなかったりするようなケースを検出できなかったり、
言語仕様上で未定義なものがたまたま問題ないアクセスになってしまうようなケースも
検出できないかもしれない。
問題が起こっていて再現条件が分かっているときに検証するツール、つまりデバッグ用のツール
としてはサニタイザは有用だし、ごく基本的なテストツールとしても使えるけど、
Rust のライフタイムチェックほど網羅的ではない。
ものによって賢さの程度が違うから一概には言えないけど
基本的にはサニタイザは実際に起こった問題を検出するものなので
入力値次第で問題が有ったりなかったりするようなケースを検出できなかったり、
言語仕様上で未定義なものがたまたま問題ないアクセスになってしまうようなケースも
検出できないかもしれない。
問題が起こっていて再現条件が分かっているときに検証するツール、つまりデバッグ用のツール
としてはサニタイザは有用だし、ごく基本的なテストツールとしても使えるけど、
Rust のライフタイムチェックほど網羅的ではない。
206デフォルトの名無しさん
2021/09/02(木) 05:18:49.53ID:90/tsZBA 一言でまとめると動的試験てことだな
207デフォルトの名無しさん
2021/09/03(金) 09:16:16.79ID:6YHhlfzl MozillaのFireFoxの場合、わざとクラッカーがセキュリティーホールを見つけ出して
そこを付いてくるから、普段の実行テストでは一度も発見できなかった
メモリーバグが問題になるが、普通のアプリの場合、ユーザーがわざとバグを
付くことはないから、そのようなホールはあまり関係ないと思う。
テスト駆動開発とかアジャイル開発とかも、普段使いで問題が無いかをテスト
することで大部分のバグが無い状態で開発していこうとする考え方。
それでもほとんどのメモリーバグは無い状態になっている。
メモリーバグがあると、普段使い的なテストをしても発覚することが多いから。
昔から言われているメモリーバグの問題点は、再現性が有る場合でも、バグが
ある行とそれが発覚した時期とがずれていることがあるから。
デバッグモードでコンパイラが自動的にチェックするコードを入れていれば、
それはなくなるはず。
Rustはその意味で、経験法則的にFireFoxみたいな特殊なものでは意味があるが
一般アプリでは余り意味が無い。ブラウザの特殊性は、世界中のクラッカーが
セキュリティーホールを探してわざとその穴を付いてくること。一般アプリでは
それがないので、隠れたバグは隠れたままになっていることが多くて、
テストで出てこなかったバグは実際問題的には余り問題となら無い事が多い。
そこを付いてくるから、普段の実行テストでは一度も発見できなかった
メモリーバグが問題になるが、普通のアプリの場合、ユーザーがわざとバグを
付くことはないから、そのようなホールはあまり関係ないと思う。
テスト駆動開発とかアジャイル開発とかも、普段使いで問題が無いかをテスト
することで大部分のバグが無い状態で開発していこうとする考え方。
それでもほとんどのメモリーバグは無い状態になっている。
メモリーバグがあると、普段使い的なテストをしても発覚することが多いから。
昔から言われているメモリーバグの問題点は、再現性が有る場合でも、バグが
ある行とそれが発覚した時期とがずれていることがあるから。
デバッグモードでコンパイラが自動的にチェックするコードを入れていれば、
それはなくなるはず。
Rustはその意味で、経験法則的にFireFoxみたいな特殊なものでは意味があるが
一般アプリでは余り意味が無い。ブラウザの特殊性は、世界中のクラッカーが
セキュリティーホールを探してわざとその穴を付いてくること。一般アプリでは
それがないので、隠れたバグは隠れたままになっていることが多くて、
テストで出てこなかったバグは実際問題的には余り問題となら無い事が多い。
208デフォルトの名無しさん
2021/09/03(金) 09:22:40.61ID:6YHhlfzl >>207
例えば、ダングリングポインタ(Use After Free)は、ptrがどこかでまだ使用中なのに、
free(ptr)としてしまうこと。しかし、そのfree()をした時点ではアプリはダウン
しないし、ptrに対して読み書きした段階でもまだ発覚せず、ptrが指すメモリー
アドレスを別の目的で使用してしまって、お互いに読み書きがある種の干渉を
起こしてしまって、データがめちゃくちゃになり、それによってどこかで不具合
が生じた時点で発覚する。
なので、バグの根本原因であるfree(ptr)を実行した行がどこかを探し出しにくいと
される。
しかし、このバグの場所とバグが起きた場所のずれは、デバッグビルド時に速度を
落としてチェックすれば本当は防げるはず。
例えば、ダングリングポインタ(Use After Free)は、ptrがどこかでまだ使用中なのに、
free(ptr)としてしまうこと。しかし、そのfree()をした時点ではアプリはダウン
しないし、ptrに対して読み書きした段階でもまだ発覚せず、ptrが指すメモリー
アドレスを別の目的で使用してしまって、お互いに読み書きがある種の干渉を
起こしてしまって、データがめちゃくちゃになり、それによってどこかで不具合
が生じた時点で発覚する。
なので、バグの根本原因であるfree(ptr)を実行した行がどこかを探し出しにくいと
される。
しかし、このバグの場所とバグが起きた場所のずれは、デバッグビルド時に速度を
落としてチェックすれば本当は防げるはず。
209デフォルトの名無しさん
2021/09/03(金) 09:24:49.55ID:6YHhlfzl210デフォルトの名無しさん
2021/09/03(金) 10:00:52.25ID:yL2Kwy6+ 根拠のない決めつけばかりで気持ち悪い。
211デフォルトの名無しさん
2021/09/03(金) 10:16:16.17ID:lmzB7IZ6 >>207
世の中にはテスターという職種の人がいてだな
世の中にはテスターという職種の人がいてだな
212デフォルトの名無しさん
2021/09/03(金) 10:46:20.27ID:yJUEU9nq >>207
任意のファイルを読むアプリはファイルのパーサーの脆弱性をついてユーザ権限でコードを実行される可能性がある
どちらかと言えばアプリよりサーバとしてアクセスを受け付けているプログラムの脆弱性をつかれて攻撃コードの実行を許してしまうことが多い
さらに上のような場合でも、アプリやサーバのプログラム自体に脆弱性があるのではなく、使用しているOSのAPI側の実装の脆弱性をつかれる可能性がある
こういうアプリやサーバやOSのコードの脆弱性にMSやGoogleは悩まされている
任意のファイルを読むアプリはファイルのパーサーの脆弱性をついてユーザ権限でコードを実行される可能性がある
どちらかと言えばアプリよりサーバとしてアクセスを受け付けているプログラムの脆弱性をつかれて攻撃コードの実行を許してしまうことが多い
さらに上のような場合でも、アプリやサーバのプログラム自体に脆弱性があるのではなく、使用しているOSのAPI側の実装の脆弱性をつかれる可能性がある
こういうアプリやサーバやOSのコードの脆弱性にMSやGoogleは悩まされている
213デフォルトの名無しさん
2021/09/03(金) 11:00:44.84ID:yJUEU9nq Valgrind と言う動的解析ツールを調べて見るといい
うちはC++のプログラムは基本これを通すことになってる
商用ならもっといいツールもあるかも知れない
そういうのを利用しても充分でないから静的解析するRustが注目されている
うちはC++のプログラムは基本これを通すことになってる
商用ならもっといいツールもあるかも知れない
そういうのを利用しても充分でないから静的解析するRustが注目されている
214デフォルトの名無しさん
2021/09/03(金) 11:27:43.59ID:6Xh4x7Us 商用の静的解析ツール使ってると、正直メモリ関係のバグなんてありえないと思えるくらいいろいろ見つけてくれるよ
215デフォルトの名無しさん
2021/09/03(金) 11:44:23.16ID:9y+1HwQb コンパイル時間に糸目を付けなければ、静的解析はもっと出来る。
216デフォルトの名無しさん
2021/09/03(金) 11:47:10.63ID:lmzB7IZ6 > メモリ関係のバグなんてありえないと思える
lintの副作用がモロに出てるなw
lintの副作用がモロに出てるなw
217デフォルトの名無しさん
2021/09/03(金) 15:20:21.54ID:MvVz2a9W 言うまでもない事だが完璧なメモリチェッカーは存在し得ない
停止問題と同値だからな
停止問題と同値だからな
218デフォルトの名無しさん
2021/09/03(金) 15:50:45.07ID:6Xh4x7Us 完璧無理っておまえの毛髪の量がプログラム停止に与える影響が読めないとかそういう話だろ?
限定的な範囲で正しけりゃ十分だよ
限定的な範囲で正しけりゃ十分だよ
219デフォルトの名無しさん
2021/09/03(金) 16:54:40.55ID:lmzB7IZ6 ゴールポストは動かしちゃダメだよ
220デフォルトの名無しさん
2021/09/03(金) 17:38:29.50ID:6Xh4x7Us 無限遠のゴールを設定するのはアホだべ
221デフォルトの名無しさん
2021/09/03(金) 17:51:18.36ID:xmwLNRYX スクリプト言語も普通にクラッシュすることあるから
222デフォルトの名無しさん
2021/09/03(金) 17:52:37.20ID:xmwLNRYX OSのコアダンプ出力とリブートに救われる手のひらの孫悟空
223デフォルトの名無しさん
2021/09/03(金) 18:28:35.67ID:iCLUv6gH rustでもメモリアロケーション失敗するとパニックになる、てリーナスが突っ込んでいたろ。
c++の場合はどうなんのかな。
c++の場合はどうなんのかな。
224デフォルトの名無しさん
2021/09/03(金) 20:13:28.89ID:USKNPKWa CoverityとVectorCASTは使ったことあるけど検知レベル最高にしても見逃すリークや二重フリー, ダングリングはそれなりにある (そもそもコードの構造が悪い場合も多いが)
検知レベル上げ過ぎると逆にFalse Positiveも増えるし
検知レベル上げ過ぎると逆にFalse Positiveも増えるし
225デフォルトの名無しさん
2021/09/04(土) 07:59:49.00ID:kFVsNuY8 無限遠のゴールポストを動かすって
こいつ文系か?
こいつ文系か?
226デフォルトの名無しさん
2021/09/04(土) 08:08:40.61ID:N/QuNfWR まあ見つからないのは間違いなく書き方が悪いよな
227デフォルトの名無しさん
2021/09/04(土) 19:04:52.86ID:7+pvijvQ ∞の概念が理解できるならそいつはもう文系ではあるまい
228デフォルトの名無しさん
2021/09/04(土) 19:11:19.50ID:ICKB9ww0 ε-N論法
229デフォルトの名無しさん
2021/09/04(土) 22:28:42.31ID:mLTAxmCN 超久しぶりにC++の参考書 買った。
いまってC++20までいってるんでしょ?
時代遅れもいいところだから勉強しようと思ってw
ただ読む気がおきない。
「pythonでいいか」って思いが・・・ww
いまってC++20までいってるんでしょ?
時代遅れもいいところだから勉強しようと思ってw
ただ読む気がおきない。
「pythonでいいか」って思いが・・・ww
230ハノン ◆QZaw55cn4c
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 だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
https://tabesugi.net/memo/2009/1a.html
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:
- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)
- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。
言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
231デフォルトの名無しさん
2021/09/05(日) 00:05:05.82ID:yIsM5ONG バカが使いこなせる言語ではないからな
232デフォルトの名無しさん
2021/09/05(日) 00:27:52.33ID:eMsTCIh+ linusに言われると返す言葉もないが、その後の文脈にある
『もし C++ で書かれた VCS が欲しいのなら、Monotone を見てみるといい。
ほんとに。連中は「本物のデータベース」を使っているよ。
「素敵なオブジェクト指向ライブラリ」も使ってる。「ナイスな C++ の抽象化」も
使ってる。そして率直なことろ、一部の情報系の人間が喜びそうな
これらすべての設計上の決定のために、できてきた結果はゲロゲロで
保守不可能なカオスだ。
でもあんたはきっと git よりも気に入るだろう。保証するよ。』
な感じでC++を気に入って、夢を見ていたいんだろうね。
『もし C++ で書かれた VCS が欲しいのなら、Monotone を見てみるといい。
ほんとに。連中は「本物のデータベース」を使っているよ。
「素敵なオブジェクト指向ライブラリ」も使ってる。「ナイスな C++ の抽象化」も
使ってる。そして率直なことろ、一部の情報系の人間が喜びそうな
これらすべての設計上の決定のために、できてきた結果はゲロゲロで
保守不可能なカオスだ。
でもあんたはきっと git よりも気に入るだろう。保証するよ。』
な感じでC++を気に入って、夢を見ていたいんだろうね。
233デフォルトの名無しさん
2021/09/05(日) 00:53:47.56ID:66hkUr5p 「オレはC++を使いこなせている」と思い込む素人を生温かく見守るスレはここですね
234デフォルトの名無しさん
2021/09/05(日) 01:42:41.34ID:eMsTCIh+235デフォルトの名無しさん
2021/09/05(日) 06:00:11.76ID:fsFc+8nQ 昔、バカでも使える言語でプログラマ人口増やしましょうてなことやってたな
BASICじゃないぞ、あれは初心者用で、バカ用じゃない
計算を数式で書くのは理系だけだから
英文で書けるようにして文系でも使えるようにしようという試みがあった
で、狙いどおり本当にバカプログラマを量産できた
それでいいことあったか?
C++はアレの逆をいっているわけだ
BASICじゃないぞ、あれは初心者用で、バカ用じゃない
計算を数式で書くのは理系だけだから
英文で書けるようにして文系でも使えるようにしようという試みがあった
で、狙いどおり本当にバカプログラマを量産できた
それでいいことあったか?
C++はアレの逆をいっているわけだ
236デフォルトの名無しさん
2021/09/05(日) 06:45:24.37ID:ClPlKiJv Qtを使ってるから、C++一択だな。
237デフォルトの名無しさん
2021/09/05(日) 12:24:02.01ID:cBh+EO/A namespaceと多態性はCだけではやりにくい
238デフォルトの名無しさん
2021/09/05(日) 12:47:17.91ID:0Cj96kG7 静的なディスパッチの充実がCに必要なのではないか
239デフォルトの名無しさん
2021/09/05(日) 14:17:57.22ID:cBh+EO/A >>234
Linuxはモノリシックカーネルなので動的メモリ確保を伴うような軟弱な
モジュールもカーネルのうちに入ってしまっているからメモリ不足ぐらいで
パニくられると手の打ちようがないから困るという話なんじゃないの(適当
OSはリソース管理を放り投げて停止することは許されないから
伝統的なやり方では起動時に非常用のメモリブロックをアロケートしておいて
メモリが枯渇したら非常用のメモリブロックを使うみたいな手段がとられる(と思う
がパニックされたらそこまで行きつかない
※ 個人の感想です
Linuxはモノリシックカーネルなので動的メモリ確保を伴うような軟弱な
モジュールもカーネルのうちに入ってしまっているからメモリ不足ぐらいで
パニくられると手の打ちようがないから困るという話なんじゃないの(適当
OSはリソース管理を放り投げて停止することは許されないから
伝統的なやり方では起動時に非常用のメモリブロックをアロケートしておいて
メモリが枯渇したら非常用のメモリブロックを使うみたいな手段がとられる(と思う
がパニックされたらそこまで行きつかない
※ 個人の感想です
240デフォルトの名無しさん
2021/09/05(日) 14:38:48.42ID:eMsTCIh+ >>239
具体的に何かのケースを想定して言ってるわけじゃないのか。
ぶっちゃけOSをC++で書くならカーネルでnew/malloc/mmapとか使う実装はしないだろうし、処理系が使うランタイムにも依存するけど基本その辺はカスタマイズできるようになってると思う。
rustでもそんな感じで処理系次第って話だと思う。
具体的に何かのケースを想定して言ってるわけじゃないのか。
ぶっちゃけOSをC++で書くならカーネルでnew/malloc/mmapとか使う実装はしないだろうし、処理系が使うランタイムにも依存するけど基本その辺はカスタマイズできるようになってると思う。
rustでもそんな感じで処理系次第って話だと思う。
241デフォルトの名無しさん
2021/09/05(日) 14:44:00.68ID:LgQhIBwq242ハノン ◆QZaw55cn4c
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」という言葉は、プロジェクト管理者の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。
>>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」という言葉は、プロジェクト管理者の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。
243デフォルトの名無しさん
2021/09/05(日) 17:47:40.38ID:eWmYSwWp244デフォルトの名無しさん
2021/09/05(日) 18:05:24.16ID:Lkm6/1Sl246はちみつ餃子 ◆8X2XSCHEME
2021/09/05(日) 18:10:26.36ID:vh6AiUnJ247デフォルトの名無しさん
2021/09/05(日) 18:23:29.28ID:cBh+EO/A >static std::shared_ptr<T> O = std::make_shared<T>(A...);
の部分って、Singleton()の初回呼び出しが複数のスレッドから同時に起こってもき
ちんと排他してくれるんでした
っけ
また排他してくれるとしても最速(そのアーキテクチャ(マルチコアかもしれない)で最も適切)
であることを気体していいんでしたっけ……
つまり生成に成功した後は排他不要なわけで、無駄にロックを取りに行きたくない……
の部分って、Singleton()の初回呼び出しが複数のスレッドから同時に起こってもき
ちんと排他してくれるんでした
っけ
また排他してくれるとしても最速(そのアーキテクチャ(マルチコアかもしれない)で最も適切)
であることを気体していいんでしたっけ……
つまり生成に成功した後は排他不要なわけで、無駄にロックを取りに行きたくない……
248デフォルトの名無しさん
2021/09/05(日) 18:24:18.83ID:yIsM5ONG >>242
おまえホント頭悪いな
おまえホント頭悪いな
249デフォルトの名無しさん
2021/09/05(日) 18:27:31.03ID:cBh+EO/A みたいな配慮がシングルトンにしたとたんに必要になる
メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
250デフォルトの名無しさん
2021/09/05(日) 18:28:54.12ID:0Cj96kG7 >>247
呼ばれたところで最後の奴が勝てば問題ないのでは
呼ばれたところで最後の奴が勝てば問題ないのでは
251デフォルトの名無しさん
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を生成したらそれで済むのに、、、
ある
>static std::shared_ptr<T> O = std::make_shared<T>(A...);
全体が排他されないとしたら、Oの生成関数(初期化式「O=」の右辺)が複数回、
それも同期的に繰り返し呼ばれるのではなく、非同期的に再入される形で呼ばれかねない
生成関数の中でリソース確保するとしたら先の呼び出しで確保したリソースの
ハンドルがdunglingにならないように配慮が必要になる
非同期的再入ということは、Oが生成→破棄→生成→破棄、にならず、
生成→生成→破棄→破棄になりかねないから、デストラクタをちゃんと書いたらリークしないとか
そういう認識で当たったらバグる
問題山積や
メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
252デフォルトの名無しさん
2021/09/05(日) 18:50:05.34ID:nyuo1Vq1 >>245
お前の質問なんかどうでもいいからデマを貼るな
お前の質問なんかどうでもいいからデマを貼るな
253デフォルトの名無しさん
2021/09/05(日) 19:08:04.86ID:UYU4AxET254デフォルトの名無しさん
2021/09/05(日) 19:10:36.36ID:2jP3+tuQ255ハノン ◆QZaw55cn4c
2021/09/05(日) 21:38:19.52256デフォルトの名無しさん
2021/09/05(日) 22:21:15.62ID:TAzC3d8r >>255
そもそも、C++の生みの親で、それに関する書籍を出してその中でC++を
良い言語と自負して(それ以上の言語が出来ないというような主張も幾度もして)
解説し、まだ推進しようとしている人が、C++を徹底的に卑下するかどうかを
疑問に思ってないことも頭が悪いと思われる原因の一つ。
そもそも、C++の生みの親で、それに関する書籍を出してその中でC++を
良い言語と自負して(それ以上の言語が出来ないというような主張も幾度もして)
解説し、まだ推進しようとしている人が、C++を徹底的に卑下するかどうかを
疑問に思ってないことも頭が悪いと思われる原因の一つ。
257デフォルトの名無しさん
2021/09/05(日) 22:29:24.50ID:15q7gB85 実際、C++は、特に初期の頃はCより全面的に優れていると誰でも思えるような
物であって、ちゃんと世界的に認められて広まっていたのに、その部分まで
全否定するようなことをインタビューで答えるわけがない。
その後に追加されて機能は人により評価が分かれて全面的に優れているとは
思えるようなものではなくなっていた。
だから、C++11は、好きな人も居れば嫌いな人も居る。C++98より全面的に
優れていると言えるかどうかは人により評価が分かれるので、好みにより
文壇の様なものが生じている。
物であって、ちゃんと世界的に認められて広まっていたのに、その部分まで
全否定するようなことをインタビューで答えるわけがない。
その後に追加されて機能は人により評価が分かれて全面的に優れているとは
思えるようなものではなくなっていた。
だから、C++11は、好きな人も居れば嫌いな人も居る。C++98より全面的に
優れていると言えるかどうかは人により評価が分かれるので、好みにより
文壇の様なものが生じている。
258デフォルトの名無しさん
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の糞コードは直しても仕方が無い
ひ、日本語でお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の糞コードは直しても仕方が無い
259デフォルトの名無しさん
2021/09/05(日) 22:36:38.84ID:66hkUr5p メモリを自動解放するfinally機能さえあればCでも大丈夫とは思う
260デフォルトの名無しさん
2021/09/05(日) 22:50:33.49ID:yIsM5ONG261デフォルトの名無しさん
2021/09/05(日) 22:52:01.95ID:cBh+EO/A とオモタがcontrol enters the declaration concurrently のときは初期化のcompletionまでshall waitで、
ただしrecursivelyだとイカン(未定義動作)と書いてあるのか……
つまりSingleton()関数内の初期化式「O=」の右辺がSingleton()を呼び出す場合か
まあ確かにWindousみたいに特殊な仕様のクリティカルセクションでもない限りデッドロックしそう
ただしrecursivelyだとイカン(未定義動作)と書いてあるのか……
つまりSingleton()関数内の初期化式「O=」の右辺がSingleton()を呼び出す場合か
まあ確かにWindousみたいに特殊な仕様のクリティカルセクションでもない限りデッドロックしそう
262デフォルトの名無しさん
2021/09/05(日) 23:09:38.17ID:eTOvJaZ9263デフォルトの名無しさん
2021/09/06(月) 00:30:26.82ID:62gS+LUW264デフォルトの名無しさん
2021/09/06(月) 04:31:29.75ID:HRRCwLhx265デフォルトの名無しさん
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
それに私も GNU Multi-Precision Library を使うときはC++のラッパの方を使います。C インターフェースの方は使い難くって使い難くって、これはもう罰ゲームですね‥‥
だから演算子のオーバーロードも控えめに使えば有用という立場です、紹介することと賛成することとは別だと思います
https://mevius.5ch.net/test/read.cgi/tech/1434079972/84
266ハノン ◆QZaw55cn4c
2021/09/06(月) 04:40:03.34 テステス
267デフォルトの名無しさん
2021/09/06(月) 07:17:56.24ID:7SReNX2q268デフォルトの名無しさん
2021/09/06(月) 08:08:09.17ID:62gS+LUW269デフォルトの名無しさん
2021/09/06(月) 08:45:11.58ID:3/UK3SOv グローバル変数と同じなのでだめだよな
普通に動的に用意して渡せばよろしい
普通に動的に用意して渡せばよろしい
270デフォルトの名無しさん
2021/09/06(月) 08:48:23.63ID:HRRCwLhx ログとかアプリの現行設定ファイルとかはSingletonっぽく実装するけどなぁ・・・
インスタンス生成が遅いものはただのグローバルにしたら起動が遅くなるし
インスタンス生成が遅いものはただのグローバルにしたら起動が遅くなるし
271デフォルトの名無しさん
2021/09/06(月) 09:20:13.64ID:FistWoaj >>268
最初のデザパタ本であるGOF本はc++とsmalltalkで書かれてるんで、javaは関係ないよ
最初のデザパタ本であるGOF本はc++とsmalltalkで書かれてるんで、javaは関係ないよ
272デフォルトの名無しさん
2021/09/06(月) 10:32:20.65ID:d5h9Y6Qi シングルトンはスレッドセーフが実現できれば問題ないでしょ
273デフォルトの名無しさん
2021/09/06(月) 12:01:04.36ID:KKMECnvR274デフォルトの名無しさん
2021/09/06(月) 12:06:51.69ID:86SPG0/G その昔、こんなクラス作ってたな
class WinMainArguments
{
public:
static HINSTANCE hInstance;
static HINSTANCE hPrevious;
static LPSTR lpszCmdLine;
static int nCmdShow;
};
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+kX276デフォルトの名無しさん
2021/09/06(月) 15:52:40.84ID:86SPG0/G >>265
GMPについて同意見
GMPについて同意見
277デフォルトの名無しさん
2021/09/06(月) 16:43:26.89ID:akmYwjNo >>274
ネームスペースつかえよバカww
ネームスペースつかえよバカww
278デフォルトの名無しさん
2021/09/06(月) 16:51:37.50ID:5nha9zO6279デフォルトの名無しさん
2021/09/06(月) 17:50:02.90ID:xrgLRigr その初期のC++ってもしかしてEC++とかいうパチモンじゃないですかね
280デフォルトの名無しさん
2021/09/06(月) 17:51:19.11ID:ugWeBDlD 今更バイエルの運指について議論してるような雑魚に構うなよ
C++もピアノも、憧れだけあって実力がまるでないバカ
C++もピアノも、憧れだけあって実力がまるでないバカ
281デフォルトの名無しさん
2021/09/06(月) 20:33:14.67ID:d5h9Y6Qi 日本語版(0xCC=フ)によりフフフフフ…で埋められたWin32アプリデバッグメモリを思い出した人、どのくらいいるかな
「フフフ…」4歳娘が撮影した花火に家族で爆笑! 見ると笑顔になる“奇跡の1枚”の状況を父親に聞いた | FNNプライムオンライン
https://www.fnn.jp/articles/-/224754
「フフフ…」4歳娘が撮影した花火に家族で爆笑! 見ると笑顔になる“奇跡の1枚”の状況を父親に聞いた | FNNプライムオンライン
https://www.fnn.jp/articles/-/224754
282はちみつ餃子 ◆8X2XSCHEME
2021/09/06(月) 23:42:11.67ID:buVCF6sT283デフォルトの名無しさん
2021/09/07(火) 02:14:57.06ID:b2odouMM 今でもchar_traitsみたいのあるね
284デフォルトの名無しさん
2021/09/07(火) 02:29:38.39ID:fAleIY7G なあに名前空間的な修飾を省略させたくない時に役立つ
285デフォルトの名無しさん
2021/09/07(火) 03:15:39.97ID:5ki66s4L >>259
cに付け加えるならgoのdefer文かなと思う。
cに付け加えるならgoのdefer文かなと思う。
286デフォルトの名無しさん
2021/09/07(火) 11:04:53.08ID:1Eqd+3ka C...Cにだってtry~catch~finallyあるんだからね!(ネタ=setjmp/longjmpを使ったマクロ)
https://gist.github.com/rampion/91594
https://gist.github.com/rampion/91594
287デフォルトの名無しさん
2021/09/07(火) 23:50:11.37ID:jZhA4bAr288デフォルトの名無しさん
2021/09/08(水) 05:21:53.89ID:KzXEzs8I289デフォルトの名無しさん
2021/09/08(水) 05:59:59.53ID:4NmVrZFW 確かにgccだと-O1でも2でも3でも暴走しちゃうけど、vc++だと最適化してもちゃんと動くね
290デフォルトの名無しさん
2021/09/08(水) 09:59:21.28ID:1wbeyQs7 VC++はマイクロソフト拡張によってCでも構造化例外処理が使えたんだよね
__try __except __finally
__try __except __finally
291デフォルトの名無しさん
2021/09/08(水) 10:59:12.67ID:6jFCz4HP intalコンパイラはほんとにヤバいが、gccの最適化で変なことになったことは自分は一回もない
292デフォルトの名無しさん
2021/09/08(水) 17:34:33.82ID:nCYYHiA4 finallyは20年前からBorlandC++に既に実装済だったしその頃のVC++なんか>>146の状態やし
294ハノン ◆QZaw55cn4c
2021/09/08(水) 19:47:37.26 >>286
最近まで try.. catch の実装の大半は sjlj だと思っていましたが最近は違うのですか?
最近まで try.. catch の実装の大半は sjlj だと思っていましたが最近は違うのですか?
295ハノン ◆QZaw55cn4c
2021/09/08(水) 19:51:02.76296デフォルトの名無しさん
2021/09/08(水) 19:52:56.05ID:zE01k1pD >>294
IDが出る板でID消してると浪人焼かれるぞ
IDが出る板でID消してると浪人焼かれるぞ
298デフォルトの名無しさん
2021/09/08(水) 20:48:20.14ID:4NmVrZFW >>289の件、再現コード抽出しました。最適時i=1がlongjmp後に0に戻ります。
// gccだと最適化なしなら正常終了。最適化すると終わらない。
#include <stdio.h>
#include <setjmp.h>
int main(int argc, char *argv[])
{
int i = 0;
jmp_buf jmpbuf;
_setjmp(jmpbuf);
printf("hoge\n");
if (i < 1)
{
i = 1;
longjmp(jmpbuf, 1);
}
return 0;
}
// gccだと最適化なしなら正常終了。最適化すると終わらない。
#include <stdio.h>
#include <setjmp.h>
int main(int argc, char *argv[])
{
int i = 0;
jmp_buf jmpbuf;
_setjmp(jmpbuf);
printf("hoge\n");
if (i < 1)
{
i = 1;
longjmp(jmpbuf, 1);
}
return 0;
}
299デフォルトの名無しさん
2021/09/08(水) 21:06:38.45ID:QZMwNs5W gccで例外ぽい事したいならC++にして使えで完結しちゃうからな……
300デフォルトの名無しさん
2021/09/08(水) 21:09:30.53ID:4NmVrZFW インラインアセンブラとかでもない限り、処理系依存の文法を使いたくはないし、>>286はあくまでネタですよ。
ただ最適化時の挙動が違う原因を知りたかったので、個人的に調べた結果を載せといただけです。
お気になさらず。
ただ最適化時の挙動が違う原因を知りたかったので、個人的に調べた結果を載せといただけです。
お気になさらず。
301デフォルトの名無しさん
2021/09/08(水) 22:55:38.96ID:7k6oklod setjmpの結果を変数に入れちゃダメだって教わらなかった?
302デフォルトの名無しさん
2021/09/08(水) 23:11:18.07ID:cWvdMGeM 入ってなくない?
303デフォルトの名無しさん
2021/09/09(木) 02:02:27.18ID:aICFtjZy304デフォルトの名無しさん
2021/09/09(木) 02:39:56.24ID:AtdpUvef コテとトリ付けながらIDは消すとかいうガイジムーブ
他スレでの荒らしがバレたら困りますって宣言してるようなもんだな笑
他スレでの荒らしがバレたら困りますって宣言してるようなもんだな笑
305デフォルトの名無しさん
2021/09/09(木) 03:11:54.20ID:GRtgENVW306デフォルトの名無しさん
2021/09/09(木) 03:58:39.82ID:k9fYYQrZ >>305
何を言いたいのか分からない無言URL貼りは時間の無駄なのでやめて欲しいです。少なくとも該当していません。
何を言いたいのか分からない無言URL貼りは時間の無駄なのでやめて欲しいです。少なくとも該当していません。
307デフォルトの名無しさん
2021/09/09(木) 04:10:55.91ID:k9fYYQrZ 一応書いておくと、>>298のコードは見れば分かるとおりiをvolatile宣言して最適化の対象から外せば当然動きます。
これはlongjmpに限った話ではありません。
先のURLの個別のコードにはありませんが、一般論としての記述はありました。このサイトが元にしてるサイト(リンクのURLは違いましたが)ではvolatileも例に含まれているようです。
https://wiki.sei.cmu.edu/confluence/display/c/MSC22-C.+Use+the+setjmp%28%29%2C+longjmp%28%29+facility+securely
これはlongjmpに限った話ではありません。
先のURLの個別のコードにはありませんが、一般論としての記述はありました。このサイトが元にしてるサイト(リンクのURLは違いましたが)ではvolatileも例に含まれているようです。
https://wiki.sei.cmu.edu/confluence/display/c/MSC22-C.+Use+the+setjmp%28%29%2C+longjmp%28%29+facility+securely
308デフォルトの名無しさん
2021/09/09(木) 04:18:38.68ID:k9fYYQrZ すみません。見落としてただけみたいですね。日本語の方でも個別のコードありましたね。寝ぼけてたかも。
309デフォルトの名無しさん
2021/09/09(木) 08:55:47.93ID:+RnvyubR >>295
嘘記事かどうかくらいは書いておくべきだと思うがね
だいぶ前に初めて見たとき俺も半信半疑だったし(D&Eをまだ読んでなかった頃だが
てかオブジェクト指向のとこをテンプレート(メタプログラミング)に置き換えるとすごいしっくり来るんだよなアレ
嘘記事かどうかくらいは書いておくべきだと思うがね
だいぶ前に初めて見たとき俺も半信半疑だったし(D&Eをまだ読んでなかった頃だが
てかオブジェクト指向のとこをテンプレート(メタプログラミング)に置き換えるとすごいしっくり来るんだよなアレ
310デフォルトの名無しさん
2021/09/09(木) 12:39:56.43ID:emntwqXC311デフォルトの名無しさん
2021/09/09(木) 12:56:38.90ID:emntwqXC312デフォルトの名無しさん
2021/09/09(木) 18:44:12.96ID:9obv3E3K ワクチン拒否とかしてそう
313デフォルトの名無しさん
2021/09/09(木) 18:45:48.31ID:I6ZDQIJr ダニングクルーガー効果のなんちゃってマスター状態でも容易に書けちゃうのが問題。
そのクソコードの状態でも一応動くところがC++の恐ろしいところでもあり幅広いフリーフォーマットの適応力でもある。
そのクソコードの状態でも一応動くところがC++の恐ろしいところでもあり幅広いフリーフォーマットの適応力でもある。
314デフォルトの名無しさん
2021/09/09(木) 19:54:26.64ID:VcdPV4nP jokeもhumorも馬鹿には理解できない
315デフォルトの名無しさん
2021/09/09(木) 20:23:36.23ID:M2q//47O316デフォルトの名無しさん
2021/09/09(木) 20:26:09.91ID:5B6QjFP1 お前らってホント人にケチつけるときだけイキイキとしてんな
317デフォルトの名無しさん
2021/09/09(木) 20:41:37.86ID:Ja2+yviO シャリーア・ポリスとかスシ・ポリスとかみたいな人
318デフォルトの名無しさん
2021/09/11(土) 11:18:20.93ID:ke/Tkn8S オブジェクト指向も構造化も原理主義者がウザいだけで
ナンチャッテでいいからやってると問題がきれいに整理できるので
やめようとは全然思わない
テンプレートだってそうだ
ナンチャッテでいいからやってると問題がきれいに整理できるので
やめようとは全然思わない
テンプレートだってそうだ
319デフォルトの名無しさん
2021/09/11(土) 11:23:49.14ID:rfW8qH4V320デフォルトの名無しさん
2021/09/11(土) 12:26:09.65ID:3OqmYb77 C++には酸っぱい葡萄もある
321デフォルトの名無しさん
2021/09/11(土) 12:37:06.92ID:FXACoymx テンプレートってただの超絶便利機能だろ
オブジェクト指向笑とは比べ物にならない
オブジェクト指向笑とは比べ物にならない
322デフォルトの名無しさん
2021/09/11(土) 12:45:07.36ID:d+bn5JZd >>318
歴史は繰り返す、ってことだろ
一時期C++コミュニティがJavaに悪影響受けたりしてたことからJavaを嫌悪してたやつが
何でもSTLの真似してりゃ自動的に価値のあるコードになると盲信してたからな
笑うしかない
歴史は繰り返す、ってことだろ
一時期C++コミュニティがJavaに悪影響受けたりしてたことからJavaを嫌悪してたやつが
何でもSTLの真似してりゃ自動的に価値のあるコードになると盲信してたからな
笑うしかない
323デフォルトの名無しさん
2021/09/11(土) 12:49:01.51ID:ke/Tkn8S 俺ら技術屋の辛いとこだよ
新しいものはとりあえず食ってみるしかない
あげくゲロマズで非常に気分が悪くなることもあるが怖がってらんない
新しいものはとりあえず食ってみるしかない
あげくゲロマズで非常に気分が悪くなることもあるが怖がってらんない
324デフォルトの名無しさん
2021/09/11(土) 12:59:15.55ID:d+bn5JZd 技術屋というか、実用してる人は盲信はしないと思う
原理主義に走るのは、自分の頭で考えない(権威に頼る)からだ
自分の頭で考えて使ってれば、自ずと長所も短所もわかるもんだ
原理主義に走るのは、自分の頭で考えない(権威に頼る)からだ
自分の頭で考えて使ってれば、自ずと長所も短所もわかるもんだ
326デフォルトの名無しさん
2021/09/11(土) 15:50:05.22ID:pU9Ou8D7 分かったら二度とデマ流すなよ
ワクチンにマイクロチップだのどこそこの銀行が潰れるだの朝鮮人が井戸に毒入れただのもだぞ
本人は軽いジョークのつもりでも、デマとして流行したら人が死ぬんだからな
ワクチンにマイクロチップだのどこそこの銀行が潰れるだの朝鮮人が井戸に毒入れただのもだぞ
本人は軽いジョークのつもりでも、デマとして流行したら人が死ぬんだからな
327デフォルトの名無しさん
2021/09/11(土) 18:07:47.03ID:ke/Tkn8S > 原理主義に走るのは、自分の頭で考えない(権威に頼る)からだ
ほんこれ
ほんこれ
328デフォルトの名無しさん
2021/09/11(土) 21:27:01.30ID:3OqmYb77 そうはいってもC言語規格にfinally機構があったら便利なはず
PGが規格追加に後ろ向きになってしまうのはコンパイラの対応が信頼できるレベルになるまで時間がかかる不快な経験を積んできたから
PGが規格追加に後ろ向きになってしまうのはコンパイラの対応が信頼できるレベルになるまで時間がかかる不快な経験を積んできたから
329デフォルトの名無しさん
2021/09/11(土) 21:45:47.80ID:mopEDxb+ デストラクタもないC言語にfinallyだけあってもねぇ…
330デフォルトの名無しさん
2021/09/11(土) 21:55:48.31ID:x2ZLDQix じゃあC#使えで……
331デフォルトの名無しさん
2021/09/11(土) 21:59:46.39ID:3OqmYb77 >>329
デストラクタがないからこそfinallyで資源解放処理を呼び出す需要があるともいえるんだけど
デストラクタがないからこそfinallyで資源解放処理を呼び出す需要があるともいえるんだけど
332デフォルトの名無しさん
2021/09/11(土) 22:14:53.27ID:rQxvOqzv >>331
実際に書いてみたらわかると思うけどどこからfinallyに来るのかわからないから解放処理書くのはけっこう大変だぞ
実際に書いてみたらわかると思うけどどこからfinallyに来るのかわからないから解放処理書くのはけっこう大変だぞ
333デフォルトの名無しさん
2021/09/11(土) 22:44:38.83ID:3OqmYb77 どこから来るかわからないのはgotoも同じ
334デフォルトの名無しさん
2021/09/11(土) 22:51:49.85ID:6kN4WIJa だからたいして楽にはならんよって話ね
335デフォルトの名無しさん
2021/09/11(土) 22:54:02.48ID:zCvRZpSn 例外がいらんわ
必要としてるやつはC使うなよ
必要としてるやつはC使うなよ
336デフォルトの名無しさん
2021/09/11(土) 23:18:46.75ID:EO9owr6G 関数毎に atexit かな
337デフォルトの名無しさん
2021/09/12(日) 01:57:56.96ID:z8yQu9Mw Goのdefer文でいいんじゃないか
338デフォルトの名無しさん
2021/09/12(日) 11:03:53.61ID:JRO5EM3e ハノンフルボッコされて火病を起こしててワロス
自分が悪いのに逆ギレするほどみっともないことはないなあw
自分が悪いのに逆ギレするほどみっともないことはないなあw
339デフォルトの名無しさん
2021/09/12(日) 11:40:02.90ID:AN8tG6su 整形後に関数が10行以上になったらコンパイルエラーにしよう
関数名1行+開きカッコ1行+return1行+閉じカッコ1行だから実質5行までな
関数名1行+開きカッコ1行+return1行+閉じカッコ1行だから実質5行までな
340デフォルトの名無しさん
2021/09/12(日) 12:24:15.40ID:SBMPlzna たまにちびっこだらけのピアノ教室に一人だけ下手くそなおじさんが混ざってて臆面もなく発表会とかにも出てくるけど、それがその固定ハンドル
341デフォルトの名無しさん
2021/09/12(日) 17:30:32.90ID:d/9I2lQ9 質問でsが
std::this_thread名前空間内の関数は、std::thread以外の手段で作ったスレッドで
実行しても大丈夫なんでしょうか、
一部のC標準ライブラリ関数みたいにスレッド起動手段次第でリークしたりすることは無い?
https://cpplover.blogspot.com/2010/10/msvc.html
std::this_thread名前空間内の関数は、std::thread以外の手段で作ったスレッドで
実行しても大丈夫なんでしょうか、
一部のC標準ライブラリ関数みたいにスレッド起動手段次第でリークしたりすることは無い?
https://cpplover.blogspot.com/2010/10/msvc.html
342デフォルトの名無しさん
2021/09/12(日) 18:10:18.89ID:TJh0S1vO >>341
やってみないと分からないから自己責任でご自由にどうぞ、というのが正しい回答
やってみないと分からないから自己責任でご自由にどうぞ、というのが正しい回答
343デフォルトの名無しさん
2021/09/12(日) 18:54:34.09ID:d/9I2lQ9344デフォルトの名無しさん
2021/09/12(日) 18:58:14.10ID:d/9I2lQ9 未定義動作とか処理系依存とかではなく、規定されていないということ?
345デフォルトの名無しさん
2021/09/12(日) 20:27:37.58ID:x/1IPUIX 大丈夫なんじゃないすかね
mainはstd::thread以外の手段で呼び出されるんだし
mainはstd::thread以外の手段で呼び出されるんだし
346デフォルトの名無しさん
2021/09/12(日) 21:31:25.44ID:ewAYKYUU どうやってアクセスするん
347ハノン ◆QZaw55cn4c
2021/09/13(月) 01:29:14.15 >>326
米国民主党の宣伝=ロイター・ブルームバーグ=真実
米国共和党、なかんずくプレジデント・トランプの言ったこと=フェイクニュース
という理解でいいでしょうか?イヴェルメクチンの話 https://www.youtube.com/watch?v=zhIg_KNfyhQ
>>338
どこがフルボッコか詳しく、ジョークのわからない馬鹿一人だけが騒いでいた、という印象ですが
>>340
バッハコンクール大人の部には出てみたいですね‥‥たぶんよくできる中高生のなかに一人ヨボヨボが混ざるの図になりそうですけれどもね
米国民主党の宣伝=ロイター・ブルームバーグ=真実
米国共和党、なかんずくプレジデント・トランプの言ったこと=フェイクニュース
という理解でいいでしょうか?イヴェルメクチンの話 https://www.youtube.com/watch?v=zhIg_KNfyhQ
>>338
どこがフルボッコか詳しく、ジョークのわからない馬鹿一人だけが騒いでいた、という印象ですが
>>340
バッハコンクール大人の部には出てみたいですね‥‥たぶんよくできる中高生のなかに一人ヨボヨボが混ざるの図になりそうですけれどもね
348デフォルトの名無しさん
2021/09/13(月) 02:16:31.80ID:ZygXXNwA349デフォルトの名無しさん
2021/09/13(月) 03:47:26.34ID:PttYpQoG わかるよ
C++とはつまりCから2キー(2半音)上げたDという意味
ピアノならCはドでDはレ
C++とはつまりCから2キー(2半音)上げたDという意味
ピアノならCはドでDはレ
350デフォルトの名無しさん
2021/09/13(月) 04:01:44.26ID:PttYpQoG このスレにMIDIエンジンを自分で作ったことある人、どのくらいいる?
351デフォルトの名無しさん
2021/09/13(月) 06:59:19.04ID:ZygXXNwA ピアノじゃなくても「CはドでDはレ」だと思うが……
352デフォルトの名無しさん
2021/09/13(月) 07:04:19.91ID:B8QV0Pmm MDLを入力してWAVを出力するコンパイラみたいのなら
353デフォルトの名無しさん
2021/09/13(月) 07:13:59.03ID:PttYpQoG >>351
思うだけならあなたの自由だから好きにしなさい
思うだけならあなたの自由だから好きにしなさい
354デフォルトの名無しさん
2021/09/13(月) 07:15:10.48ID:OJvNe7+i >>351
世の中には移調楽器って言うものがあって、例えば普通によく見かけるトランペットはドの音はB♭だったりする
世の中には移調楽器って言うものがあって、例えば普通によく見かけるトランペットはドの音はB♭だったりする
355デフォルトの名無しさん
2021/09/13(月) 07:16:20.40ID:PttYpQoG Windowsの標準システムドライブがCであることの経緯を知らないでPGやってる人、どのくらいいる?
356デフォルトの名無しさん
2021/09/13(月) 07:50:09.00ID:B8QV0Pmm UNIXから一歩も離れたくない人とか?
357デフォルトの名無しさん
2021/09/13(月) 07:56:33.80ID:9W3p606T aとbドライブがフロッピー
358デフォルトの名無しさん
2021/09/13(月) 07:59:56.78ID:B8QV0Pmm かつて日本ではAがHDDだった
359デフォルトの名無しさん
2021/09/13(月) 09:28:48.75ID:Kz73eSbE360デフォルトの名無しさん
2021/09/13(月) 12:01:25.13ID:DUyA86Uv MIDIなんてPC-98以前のFM音源搭載機でしかいじらなかった
MIDIドライバとかならともかくMIDIエンジンが何なのかよく分からない
MIDIドライバとかならともかくMIDIエンジンが何なのかよく分からない
361ハノン ◆QZaw55cn4c
2021/09/13(月) 13:47:19.19 >>348
スレチガイも大概だからここで終わりましょうか
バッハコンクール https://www.bach-concours.org/p/about.html
趣旨「J.Sバッハの作品はクラシック音楽の真髄、導入期からポリフォニー音楽や舞曲に親しみ、ピアノの学習の中に取り入れて、そしてレパートリーにしていただきたい」、おっしゃるとおり誰でも参加可能です
https://matsuri.5ch.net/test/read.cgi/piano/1488364000/
バッハはこんな曲を作った人:https://www.youtube.com/watch?v=SBWGgwzcjYc
確かアニメ監督の押井守は若い頃バッハの合唱団にいたと聞いています
スレチガイも大概だからここで終わりましょうか
バッハコンクール https://www.bach-concours.org/p/about.html
趣旨「J.Sバッハの作品はクラシック音楽の真髄、導入期からポリフォニー音楽や舞曲に親しみ、ピアノの学習の中に取り入れて、そしてレパートリーにしていただきたい」、おっしゃるとおり誰でも参加可能です
https://matsuri.5ch.net/test/read.cgi/piano/1488364000/
バッハはこんな曲を作った人:https://www.youtube.com/watch?v=SBWGgwzcjYc
確かアニメ監督の押井守は若い頃バッハの合唱団にいたと聞いています
362デフォルトの名無しさん
2021/09/13(月) 19:44:06.04ID:O/wDGHc8 >>361
スレ違いはお前一人なんだが・・・
スレ違いはお前一人なんだが・・・
363デフォルトの名無しさん
2021/09/15(水) 11:32:22.49ID:0GWRKP/3 関数のポインタを引数で受け取る関数に
予め定義した関数のポインタの代わりに
lambda関数のポインタを渡したいとき
どう書けばよいですか?
予め定義した関数のポインタの代わりに
lambda関数のポインタを渡したいとき
どう書けばよいですか?
364デフォルトの名無しさん
2021/09/15(水) 11:43:21.99ID:KsZNjWDc >>363
ラムダ式を呼び出すラッパー関数を作って、その関数ポインタを渡す
ラムダ式を呼び出すラッパー関数を作って、その関数ポインタを渡す
365デフォルトの名無しさん
2021/09/15(水) 11:57:59.21ID:tjq2eHQi std::functionでええやろか?
366デフォルトの名無しさん
2021/09/15(水) 12:01:19.03ID:+suq2kti >>363
こういうこと?
void func1(void (*arg)())
{
arg();
}
template <std::invocable F>
void func2(F arg)
{
arg();
}
int main()
{
func1([]{});
func2([]{});
}
こういうこと?
void func1(void (*arg)())
{
arg();
}
template <std::invocable F>
void func2(F arg)
{
arg();
}
int main()
{
func1([]{});
func2([]{});
}
367デフォルトの名無しさん
2021/09/15(水) 12:57:52.48ID:gM7DTPzC368はちみつ餃子 ◆8X2XSCHEME
2021/09/15(水) 13:01:11.97ID:/JHaU2Oz >>363
クロージャ (ラムダ式によって作られた関数オブジェクト) は周囲の変数をキャプチャしないときに限り関数ポインタに変換可能。
https://timsong-cpp.github.io/cppwp/n3337/expr#prim.lambda-6
逆に言えばそうでないときは関数ポインタと互換性はない。
受け取る側が関数ポインタとして受け取るという前提を動かせないのであれば
渡すラムダ式のほうをキャプチャしない形にしてくださいということになるし、
汎用的にラムダ式を受け取れるようにしたいのだということであれば >>365-366 という方法をとることになる。
クロージャ (ラムダ式によって作られた関数オブジェクト) は周囲の変数をキャプチャしないときに限り関数ポインタに変換可能。
https://timsong-cpp.github.io/cppwp/n3337/expr#prim.lambda-6
逆に言えばそうでないときは関数ポインタと互換性はない。
受け取る側が関数ポインタとして受け取るという前提を動かせないのであれば
渡すラムダ式のほうをキャプチャしない形にしてくださいということになるし、
汎用的にラムダ式を受け取れるようにしたいのだということであれば >>365-366 という方法をとることになる。
369デフォルトの名無しさん
2021/09/15(水) 13:05:03.04ID:0GWRKP/3 >>366
template<typename F> void func2(F arg) { arg(); }
int main() { func2([]{}); }
↑
これだと動いています
void func1(void (*arg)()) { arg(); }
int main() { func1([]{}); }
↑
やりたいのはこっちだったんですがこれはコンパイルエラーになりますた
# invocable は C++20 からみたいですね 目的にあってるかどうか判りませんが試す環境が今無いので後回しです
template<typename F> void func2(F arg) { arg(); }
int main() { func2([]{}); }
↑
これだと動いています
void func1(void (*arg)()) { arg(); }
int main() { func1([]{}); }
↑
やりたいのはこっちだったんですがこれはコンパイルエラーになりますた
# invocable は C++20 からみたいですね 目的にあってるかどうか判りませんが試す環境が今無いので後回しです
370デフォルトの名無しさん
2021/09/15(水) 13:05:45.58ID:0GWRKP/3371デフォルトの名無しさん
2021/09/15(水) 13:22:34.75ID:+suq2kti そういうオチか
372デフォルトの名無しさん
2021/09/15(水) 16:27:00.87ID:46YA8/2z >>369
ヒント: コンセプト
ヒント: コンセプト
373デフォルトの名無しさん
2021/09/16(木) 21:11:24.40ID:wgmfJty/ 単項+が意味を持つ例のやつか
374デフォルトの名無しさん
2021/09/17(金) 16:40:49.64ID:J/w/zJeW 仕事が生きがい?会社員の分際で?そろそろ認めなさい…あなたたちは単なる駒です
⇒赤羽の父ひろゆきが教える仕事の本質とやりたいことの違いが凄過ぎて感動が止まらない…
https://www.youtube.com/watch?v=zkwQOdq17dI
【ひろゆき/切り抜き】サラリーマンって資本主義の奴隷なの?
https://www.youtube.com/watch?v=Vi-dvyd5ksE&t=74s
【ひろゆき】社会人語っちゃうサラリーマンについて語りました
https://www.youtube.com/watch?v=pX7NHj_rIBg
奴隷は身近にある?日本の奴隷について【ひろゆき 切り抜き】
https://www.youtube.com/watch?v=evQjCUWIHV4
【ひろゆき】会社員なんて楽しくない?⇒楽しいしラクな仕事の仕方とは※サラリーマン必見!
https://www.youtube.com/watch?v=T95-FS8sT3w&t=390s
【ひろゆき】日本のサラリーマン制度...終わってますよwww
https://www.youtube.com/watch?v=Y-30zk2zDn0
【ひろゆき】視聴者の質問そっちのけで虚言癖アピールするひろゆき
https://www.youtube.com/watch?v=cMjk9B4J2n4
【ひろゆき/切り抜き】虚言癖ってどうやって直せばいい?
https://www.youtube.com/watch?v=5cS7vyb0tfE
⇒赤羽の父ひろゆきが教える仕事の本質とやりたいことの違いが凄過ぎて感動が止まらない…
https://www.youtube.com/watch?v=zkwQOdq17dI
【ひろゆき/切り抜き】サラリーマンって資本主義の奴隷なの?
https://www.youtube.com/watch?v=Vi-dvyd5ksE&t=74s
【ひろゆき】社会人語っちゃうサラリーマンについて語りました
https://www.youtube.com/watch?v=pX7NHj_rIBg
奴隷は身近にある?日本の奴隷について【ひろゆき 切り抜き】
https://www.youtube.com/watch?v=evQjCUWIHV4
【ひろゆき】会社員なんて楽しくない?⇒楽しいしラクな仕事の仕方とは※サラリーマン必見!
https://www.youtube.com/watch?v=T95-FS8sT3w&t=390s
【ひろゆき】日本のサラリーマン制度...終わってますよwww
https://www.youtube.com/watch?v=Y-30zk2zDn0
【ひろゆき】視聴者の質問そっちのけで虚言癖アピールするひろゆき
https://www.youtube.com/watch?v=cMjk9B4J2n4
【ひろゆき/切り抜き】虚言癖ってどうやって直せばいい?
https://www.youtube.com/watch?v=5cS7vyb0tfE
375デフォルトの名無しさん
2021/09/18(土) 12:55:20.00ID:fzYJNrfO 聞いてくれウィンドーズ10で
GetLocalTime(&st1);
const system_clock::time_point now = system_clock::now();
GetLocalTime&(st2);
とした後に、nowから
const time_t tt = system_clock::to_time_t(tp);
auto msec = duration_cast<milliseconds>(tp.time_since_epoch()).count() % 1000;
としてnowのms単位のUNIX Timeを算出したらば、
st1 ≦ now
は当然成立しているが、
now ≦ st2
は成立しないことがあり、何か
now ≦ st2 + 1
なんじゃわ;;;
何で?!
GetLocalTime(&st1);
const system_clock::time_point now = system_clock::now();
GetLocalTime&(st2);
とした後に、nowから
const time_t tt = system_clock::to_time_t(tp);
auto msec = duration_cast<milliseconds>(tp.time_since_epoch()).count() % 1000;
としてnowのms単位のUNIX Timeを算出したらば、
st1 ≦ now
は当然成立しているが、
now ≦ st2
は成立しないことがあり、何か
now ≦ st2 + 1
なんじゃわ;;;
何で?!
376デフォルトの名無しさん
2021/09/18(土) 12:57:50.95ID:fzYJNrfO 処理系はMSVC2019でつ、
duration_cast<T>はTで指定した時間単位未満は切り捨てとC++の規格で決まっているはず……
duration_cast<T>はTで指定した時間単位未満は切り捨てとC++の規格で決まっているはず……
377デフォルトの名無しさん
2021/09/18(土) 13:05:15.92ID:fzYJNrfO ちなみにst1 < st2 でありかつ (now ≦ st2) が非成立、というケースも発生するあるから
おかしいのは明らかにstd::chronoの方、
おかしいのは明らかにstd::chronoの方、
378デフォルトの名無しさん
2021/09/18(土) 13:23:54.83ID:I+biH5jK379デフォルトの名無しさん
2021/09/18(土) 13:43:19.07ID:fzYJNrfO >>378
>>377のは時刻のキャッシングみたいなことをしており呼び出した瞬間の時刻を返していないとしたらそれはGetLocalTime()の方ではない、という証左
つなみにマルチコアと最適化(いやしくもAPIの呼び出しがあるのであり得ないが)とプリエンプションの合わせ技で
実行順序が変になり得るかも、みたいな被害車妄想で
GetLocalTime(&st1);
const system_clock::time_point now = system_clock::now();
_ReadWriteBarrier();
GetLocalTime&(st2);
としてみたが>>377な現象は変わらんかったは、
>>377のは時刻のキャッシングみたいなことをしており呼び出した瞬間の時刻を返していないとしたらそれはGetLocalTime()の方ではない、という証左
つなみにマルチコアと最適化(いやしくもAPIの呼び出しがあるのであり得ないが)とプリエンプションの合わせ技で
実行順序が変になり得るかも、みたいな被害車妄想で
GetLocalTime(&st1);
const system_clock::time_point now = system_clock::now();
_ReadWriteBarrier();
GetLocalTime&(st2);
としてみたが>>377な現象は変わらんかったは、
380デフォルトの名無しさん
2021/09/18(土) 13:48:57.22ID:vjp4M7Ow windowsのAPI同士で比較しろ
一般に違うAPIを使ってるなら一貫した結果にならなくてもおかしくない
一般に違うAPIを使ってるなら一貫した結果にならなくてもおかしくない
381デフォルトの名無しさん
2021/09/18(土) 13:53:59.82ID:I+biH5jK ちゃんと知りたいならsystem_clock::nowが内部でどのAPIを呼んでいるのか調べてみては
382デフォルトの名無しさん
2021/09/18(土) 13:58:54.14ID:EqZgRVmV 変数tpはなにものですか
383デフォルトの名無しさん
2021/09/18(土) 14:01:55.85ID:EqZgRVmV というか% 1000っておかしくね???
384デフォルトの名無しさん
2021/09/19(日) 00:12:35.69ID:EWVuImUN >>375
お前の頭がおかしいんだよ
お前の頭がおかしいんだよ
385デフォルトの名無しさん
2021/09/19(日) 00:47:53.30ID:hcp/HEe5 不等号≦への理解、間違ってないか
386デフォルトの名無しさん
2021/09/19(日) 07:30:37.33ID:CNUd2o2A unsignedとintを比較してるとかどうせそういうオチだろ
387デフォルトの名無しさん
2021/09/19(日) 13:12:19.06ID:/yxUr6Cy 中途半端なコードだけチラ見せされてもな
再現する完全なコードを出せとしか
再現する完全なコードを出せとしか
388デフォルトの名無しさん
2021/09/19(日) 15:50:35.11ID:neurUQ4a >>386
天才なのでそんなヘマはしますしません、
>>387
再現コード貼る、
https://ideone.com/GeMebI
※ 冒頭コメントの通り、非Windows環境では現象再現しないコードなのので注意
ウィンドーズでの実行結果:
i=---: st1, chrono, st2: ORDER CHECK
i= 0: 1632034143228, 1632034143228, 1632034143228: OK.
i= 1: 1632034143229, 1632034143229, 1632034143229: OK.
i= 2: 1632034143229, 1632034143229, 1632034143229: OK.
i= 3: 1632034143229, 1632034143230, 1632034143229: NG!
i= 4: 1632034143229, 1632034143230, 1632034143229: NG!
i= 5: 1632034143230, 1632034143230, 1632034143230: OK.
i= 6: 1632034143230, 1632034143230, 1632034143230: OK.
i= 7: 1632034143230, 1632034143231, 1632034143230: NG!
i= 8: 1632034143230, 1632034143231, 1632034143230: NG!
i= 9: 1632034143230, 1632034143231, 1632034143230: NG!
==> ORDER CHECK 「NG!」のところでchrono > st2 になっており、chronoのtime_pointがSYSTEMTIMEを1 msだけ追い越している
天才なのでそんなヘマはしますしません、
>>387
再現コード貼る、
https://ideone.com/GeMebI
※ 冒頭コメントの通り、非Windows環境では現象再現しないコードなのので注意
ウィンドーズでの実行結果:
i=---: st1, chrono, st2: ORDER CHECK
i= 0: 1632034143228, 1632034143228, 1632034143228: OK.
i= 1: 1632034143229, 1632034143229, 1632034143229: OK.
i= 2: 1632034143229, 1632034143229, 1632034143229: OK.
i= 3: 1632034143229, 1632034143230, 1632034143229: NG!
i= 4: 1632034143229, 1632034143230, 1632034143229: NG!
i= 5: 1632034143230, 1632034143230, 1632034143230: OK.
i= 6: 1632034143230, 1632034143230, 1632034143230: OK.
i= 7: 1632034143230, 1632034143231, 1632034143230: NG!
i= 8: 1632034143230, 1632034143231, 1632034143230: NG!
i= 9: 1632034143230, 1632034143231, 1632034143230: NG!
==> ORDER CHECK 「NG!」のところでchrono > st2 になっており、chronoのtime_pointがSYSTEMTIMEを1 msだけ追い越している
389デフォルトの名無しさん
2021/09/19(日) 15:57:36.84ID:neurUQ4a こっそり訂正するが、>>377で
>st1 < st2 でありかつ (now ≦ st2) が非成立、というケースも発生するあるから
と言ったがな、ありゃ誤報だスマンカッタ、
あとちなみに、>>375を書いた時点では、現象再現はFILETIMEを使わずに、以下の方法で、
SYSTEMTIMEと ( (time_point - epochタイム) を tm構造体に変換したもの、の
それぞれからから直接シリアル日時を出して比較すた、
year * (12 * 31 * 24 * 60 * 60 * 1000)
+ month * (31 * 24 * 60 * 60 * 1000) // 一ヵ月の日数を31固定で換算しているが、大小比較目的なのでこれで問題無い。
+ day * (24 * 60 * 60 * 1000)
+ hour * (60 * 60 * 1000)
+ minute * (60 * 1000)
+ second * (1000)
+ millisecond
>st1 < st2 でありかつ (now ≦ st2) が非成立、というケースも発生するあるから
と言ったがな、ありゃ誤報だスマンカッタ、
あとちなみに、>>375を書いた時点では、現象再現はFILETIMEを使わずに、以下の方法で、
SYSTEMTIMEと ( (time_point - epochタイム) を tm構造体に変換したもの、の
それぞれからから直接シリアル日時を出して比較すた、
year * (12 * 31 * 24 * 60 * 60 * 1000)
+ month * (31 * 24 * 60 * 60 * 1000) // 一ヵ月の日数を31固定で換算しているが、大小比較目的なのでこれで問題無い。
+ day * (24 * 60 * 60 * 1000)
+ hour * (60 * 60 * 1000)
+ minute * (60 * 1000)
+ second * (1000)
+ millisecond
390デフォルトの名無しさん
2021/09/19(日) 16:10:18.78ID:HwX1dH8g まともに読んでないがバリアの使い方がおかしくて実行順序入れ替わってるとかじゃね??
391デフォルトの名無しさん
2021/09/19(日) 16:33:01.30ID:neurUQ4a >>390
(1) _ReadWriteBarrier()は最強のバリアーやぞ;;;
(2) GetLocalTime()がどんな副作用を持つ関数かコンパイラが知るはずは無いのだから
最適化でコードの入れ替えや変数のレジスタ割り当てしっぱなしということはあり得ない
(3) ていうかそれ以前に、GetLocalTime()やstd::chronoの呼び出し元がシングルスレッドなのだから
それで順序がおかしくなるとかCPUがおかしいか、スレッドをプリエンプトして再びディスパッチする際に
別のコアに実行させようとする際にOSがヘマしているかのどちらかという話に……
ちなみに漏れは正常動作しており、本人が言うのだから間違いない
(1) _ReadWriteBarrier()は最強のバリアーやぞ;;;
(2) GetLocalTime()がどんな副作用を持つ関数かコンパイラが知るはずは無いのだから
最適化でコードの入れ替えや変数のレジスタ割り当てしっぱなしということはあり得ない
(3) ていうかそれ以前に、GetLocalTime()やstd::chronoの呼び出し元がシングルスレッドなのだから
それで順序がおかしくなるとかCPUがおかしいか、スレッドをプリエンプトして再びディスパッチする際に
別のコアに実行させようとする際にOSがヘマしているかのどちらかという話に……
ちなみに漏れは正常動作しており、本人が言うのだから間違いない
392デフォルトの名無しさん
2021/09/19(日) 16:39:43.92ID:k8GedCcQ393はちみつ餃子 ◆8X2XSCHEME
2021/09/19(日) 17:02:40.43ID:nkVr2ypq >>375
GetLocalTime の分解能は 10ms くらいっぽいぞ。
system_clock::now がもっと精度の高い API を使っていたら
そんくらいの前後はあってもおかしくないんじゃね。
GetLocalTime の分解能は 10ms くらいっぽいぞ。
system_clock::now がもっと精度の高い API を使っていたら
そんくらいの前後はあってもおかしくないんじゃね。
394デフォルトの名無しさん
2021/09/19(日) 17:17:42.61ID:k8GedCcQ https://ideone.com/qA5yOL
system_clockの部分を生のFILETIMEで置き換えてみた
実行結果はこんな感じ
i= 0: 132765453416200000, 132765129416213861, 132765453416200000: NG!
i= 1: 132765453416210000, 132765129416218094, 132765453416210000: NG!
i= 2: 132765453416210000, 132765129416218837, 132765453416210000: NG!
i= 3: 132765453416210000, 132765129416219530, 132765453416210000: NG!
GetLocalTimeやめたら?
system_clockの部分を生のFILETIMEで置き換えてみた
実行結果はこんな感じ
i= 0: 132765453416200000, 132765129416213861, 132765453416200000: NG!
i= 1: 132765453416210000, 132765129416218094, 132765453416210000: NG!
i= 2: 132765453416210000, 132765129416218837, 132765453416210000: NG!
i= 3: 132765453416210000, 132765129416219530, 132765453416210000: NG!
GetLocalTimeやめたら?
395デフォルトの名無しさん
2021/09/19(日) 17:28:49.56ID:UeoKc9fZ 時刻取得用のAPIをパフォーマンス計測用に使っちゃったんだね
WIN32では大昔からQueryPerformanceFrequencyとQueryPerformanceCounterを使うよ
https://docs.microsoft.com/en-us/windows/win32/api/profileapi/
WIN32では大昔からQueryPerformanceFrequencyとQueryPerformanceCounterを使うよ
https://docs.microsoft.com/en-us/windows/win32/api/profileapi/
396デフォルトの名無しさん
2021/09/19(日) 17:59:29.70ID:UeoKc9fZ 時刻取得でそのまま精度を上げるAPIとしては
GetSystemTimePreciseAsFileTime
https://docs.microsoft.com/ja-jp/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime
ただしWindows 8以降。それ以前だと以下を使うしかないっぽいね。
GetSystemTimeAsFileTime
std::system_time::nowの実装としては、_Xtime_get_ticksを使用している(2021年9月21日17:57JST現在)
https://github.com/microsoft/STL/blob/main/stl/inc/chrono#L663-L665
これが使用しているAPIについて聞いたStackoverflowの質問
https://stackoverflow.com/questions/54933940/what-clock-does-the-visual-studio-2017-crt-implementation-of-stdchronosystem
上記によると最初に書いたAPIである模様
GetSystemTimePreciseAsFileTime
https://docs.microsoft.com/ja-jp/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime
ただしWindows 8以降。それ以前だと以下を使うしかないっぽいね。
GetSystemTimeAsFileTime
std::system_time::nowの実装としては、_Xtime_get_ticksを使用している(2021年9月21日17:57JST現在)
https://github.com/microsoft/STL/blob/main/stl/inc/chrono#L663-L665
これが使用しているAPIについて聞いたStackoverflowの質問
https://stackoverflow.com/questions/54933940/what-clock-does-the-visual-studio-2017-crt-implementation-of-stdchronosystem
上記によると最初に書いたAPIである模様
397デフォルトの名無しさん
2021/09/19(日) 19:46:00.85ID:neurUQ4a >>393
GetLocalTime()の精度が10 ms台だというのは
Windowsのデフォルトのスレッドへの最大ディスパッチ時間15.6 ms(PCによっては10 ms)の影響が混入している可能性、
>>392のリンク先のような計測方法をとった場合、計測中に他のスレッドに実行権を横取りされたりすると、どうしても
期待する時間に対して15.6 msとか(高優先のスレッドが相次いでディスパッチされた場合はあるいはもっと)実際の時間が大きくなる
一方>>375の計測方法は時間の順序にのみ注目しており、プリエンプションの影響を受けない(はずだった
この話に猜疑があるなら後で述べる
>>392
>>392の情報提供はdクスやし実際乗り換えようかと考えているが、それはそうとして、std::chronoのふるまいを検証しなくて委員会?
GetLocalTime()の精度が10 ms台だというのは
Windowsのデフォルトのスレッドへの最大ディスパッチ時間15.6 ms(PCによっては10 ms)の影響が混入している可能性、
>>392のリンク先のような計測方法をとった場合、計測中に他のスレッドに実行権を横取りされたりすると、どうしても
期待する時間に対して15.6 msとか(高優先のスレッドが相次いでディスパッチされた場合はあるいはもっと)実際の時間が大きくなる
一方>>375の計測方法は時間の順序にのみ注目しており、プリエンプションの影響を受けない(はずだった
この話に猜疑があるなら後で述べる
>>392
>>392の情報提供はdクスやし実際乗り換えようかと考えているが、それはそうとして、std::chronoのふるまいを検証しなくて委員会?
398デフォルトの名無しさん
2021/09/19(日) 20:05:49.20ID:neurUQ4a というわけでms単位のUNIX timeを得るにあたってstd::chronoとGetFileTimeAsSystemTime()が同じ精度であり互換であることを
直接検証すた、
https://ideone.com/9Opqj9
実行結果(Windows 10)
i=---: st1, chrono, st2: ORDER CHECK
i= 0: 1632049473157, 1632049473157, 1632049473157: OK.
i= 1: 1632049473158, 1632049473158, 1632049473158: OK.
i= 2: 1632049473159, 1632049473159, 1632049473159: OK.
i= 3: 1632049473159, 1632049473159, 1632049473159: OK.
i= 4: 1632049473159, 1632049473159, 1632049473159: OK.
i= 5: 1632049473159, 1632049473159, 1632049473159: OK.
i= 6: 1632049473159, 1632049473159, 1632049473159: OK.
i= 7: 1632049473159, 1632049473159, 1632049473159: OK.
i= 8: 1632049473160, 1632049473160, 1632049473160: OK.
i= 9: 1632049473160, 1632049473160, 1632049473160: OK.
NG times=0/10
問題無くなったやたー
直接検証すた、
https://ideone.com/9Opqj9
実行結果(Windows 10)
i=---: st1, chrono, st2: ORDER CHECK
i= 0: 1632049473157, 1632049473157, 1632049473157: OK.
i= 1: 1632049473158, 1632049473158, 1632049473158: OK.
i= 2: 1632049473159, 1632049473159, 1632049473159: OK.
i= 3: 1632049473159, 1632049473159, 1632049473159: OK.
i= 4: 1632049473159, 1632049473159, 1632049473159: OK.
i= 5: 1632049473159, 1632049473159, 1632049473159: OK.
i= 6: 1632049473159, 1632049473159, 1632049473159: OK.
i= 7: 1632049473159, 1632049473159, 1632049473159: OK.
i= 8: 1632049473160, 1632049473160, 1632049473160: OK.
i= 9: 1632049473160, 1632049473160, 1632049473160: OK.
NG times=0/10
問題無くなったやたー
399デフォルトの名無しさん
2021/09/19(日) 20:13:38.40ID:neurUQ4a >>393
GetSystemTime()は確かに根本的に精度悪かったスマンカッタorz
この結果からすると、ウィンドーズのシステム時間のの実装は、
OSがプリエンプトした際に更新し、ディスパッチ中は値が変わらないというしくみな可能性が大きい
※ 取得時間の間隔が15.6 msの倍数にならないのは、15.6 msというのがあくまで1津のスレッドが
ディスパッチされてからプリエンプトされるまでの「最大」時間であって実際は高優先のやつに横取りされたり
自発的に待ちに入ったりで15.6 msより小さい時間で実行権をOSに返すからだと思う
GetSystemTime()は確かに根本的に精度悪かったスマンカッタorz
この結果からすると、ウィンドーズのシステム時間のの実装は、
OSがプリエンプトした際に更新し、ディスパッチ中は値が変わらないというしくみな可能性が大きい
※ 取得時間の間隔が15.6 msの倍数にならないのは、15.6 msというのがあくまで1津のスレッドが
ディスパッチされてからプリエンプトされるまでの「最大」時間であって実際は高優先のやつに横取りされたり
自発的に待ちに入ったりで15.6 msより小さい時間で実行権をOSに返すからだと思う
400デフォルトの名無しさん
2021/09/19(日) 21:46:58.47ID:UeoKc9fZ 古いWIN32開発者には常識的な話で検証の必要もなく、実際に検証用のプログラムは昔から大量に作られてるからだと思う
取得時間の間隔が15.6 msの倍数にならないのは「主に16ビット Windows との下位互換性のため」
https://docs.microsoft.com/ja-jp/windows/win32/sysinfo/windows-time
取得時間の間隔が15.6 msの倍数にならないのは「主に16ビット Windows との下位互換性のため」
https://docs.microsoft.com/ja-jp/windows/win32/sysinfo/windows-time
401デフォルトの名無しさん
2021/09/19(日) 22:17:24.32ID:k8GedCcQ >>400
後半って「Windows時刻」の説明だよね?
GetSystemTimeで得られるのは「システム時刻」であって、また別の時刻体系だと読んだけど間違ってる?
https://docs.microsoft.com/ja-jp/windows/win32/sysinfo/system-time
WinAPIスレに持っていったほうがいいかもな
後半って「Windows時刻」の説明だよね?
GetSystemTimeで得られるのは「システム時刻」であって、また別の時刻体系だと読んだけど間違ってる?
https://docs.microsoft.com/ja-jp/windows/win32/sysinfo/system-time
WinAPIスレに持っていったほうがいいかもな
402デフォルトの名無しさん
2021/09/19(日) 22:38:35.16ID:UeoKc9fZ403デフォルトの名無しさん
2021/09/20(月) 00:06:39.19ID:luBeUSFz 周期15.6 msを下位互換性のために新しいWindowsがエミュレートしているというのはありえない
1スレッドへの最大割り当て時間としての15.6 msはPCによって変わり得るデフォルト値にすぎないし、
http://hp.vector.co.jp/authors/VA007219/rtc_pic.html
だいたい設定でも変わるし、
https://atmarkit.itmedia.co.jp/ait/articles/1410/30/news150_2.html
(スレッドのクォンタムタイム)
取得間隔が15.6 msにならない理由は>>399で説明いしたし
1スレッドへの最大割り当て時間としての15.6 msはPCによって変わり得るデフォルト値にすぎないし、
http://hp.vector.co.jp/authors/VA007219/rtc_pic.html
だいたい設定でも変わるし、
https://atmarkit.itmedia.co.jp/ait/articles/1410/30/news150_2.html
(スレッドのクォンタムタイム)
取得間隔が15.6 msにならない理由は>>399で説明いしたし
404デフォルトの名無しさん
2021/09/20(月) 00:10:20.87ID:luBeUSFz で、GetTickCount()の分解能かきちり1 msであることはビジーループ的に値をとってみたらワカル
分解能に関して後方互換性も糞もなく昔からそいうブツのはず
多分やけど、ハードウェアのカウンタを読んでるだけやからなあれ
分解能に関して後方互換性も糞もなく昔からそいうブツのはず
多分やけど、ハードウェアのカウンタを読んでるだけやからなあれ
405デフォルトの名無しさん
2021/09/20(月) 00:25:55.12ID:luBeUSFz と思って、
const int N = 10;
std::vector<DWORD> vec;
DWORD curTmg = GetTickCount();
DWORD prevTmg;
while (vec.size() < (size_t)N) {
prevTmg = curTmg;
curTmg = GetTickCount();
if (prevTmg != curTmg) {
vec.push_back(curTmg);
}
}
for (int i = 0; i < N; i++) {
(差分vec[i] - vec[i-1]をprint)
}
というのをやったら、
const int N = 10;
std::vector<DWORD> vec;
DWORD curTmg = GetTickCount();
DWORD prevTmg;
while (vec.size() < (size_t)N) {
prevTmg = curTmg;
curTmg = GetTickCount();
if (prevTmg != curTmg) {
vec.push_back(curTmg);
}
}
for (int i = 0; i < N; i++) {
(差分vec[i] - vec[i-1]をprint)
}
というのをやったら、
406デフォルトの名無しさん
2021/09/20(月) 00:26:50.20ID:luBeUSFz vec[0]=1391507593
vec[1]=1391507609 (diff=16)
vec[2]=1391507625 (diff=16)
vec[3]=1391507640 (diff=15)
vec[4]=1391507656 (diff=16)
vec[5]=1391507671 (diff=15)
vec[6]=1391507687 (diff=16)
vec[7]=1391507703 (diff=16)
vec[8]=1391507718 (diff=15)
vec[9]=1391507734 (diff=16)
やったわorz
まつがえますたすみません;;;
勉強になるなあ、
vec[1]=1391507609 (diff=16)
vec[2]=1391507625 (diff=16)
vec[3]=1391507640 (diff=15)
vec[4]=1391507656 (diff=16)
vec[5]=1391507671 (diff=15)
vec[6]=1391507687 (diff=16)
vec[7]=1391507703 (diff=16)
vec[8]=1391507718 (diff=15)
vec[9]=1391507734 (diff=16)
やったわorz
まつがえますたすみません;;;
勉強になるなあ、
407デフォルトの名無しさん
2021/09/20(月) 06:12:36.98ID:DnvAIBnA >>402
自己レスです
GetTickCountとGetLocalTimeとGetSystemTimeの分解能調査
https://ideone.com/wKC8DA
1000回値が変わるのにかかった時間をマイクロ秒で計測した(std::chrono::high_resolution_clock::now()で計測)
PS C:\> .\ConsoleApplication8.exe
15614998
1003946
1000238
PS C:\> .\ConsoleApplication8.exe
15621414
1001066
1001218
PS C:\>
結論: GetLocalTimeは約1秒なのでこの環境(Win10+ハード)では1ms程度の分解能がある
感想: 誤差大きい
自己レスです
GetTickCountとGetLocalTimeとGetSystemTimeの分解能調査
https://ideone.com/wKC8DA
1000回値が変わるのにかかった時間をマイクロ秒で計測した(std::chrono::high_resolution_clock::now()で計測)
PS C:\> .\ConsoleApplication8.exe
15614998
1003946
1000238
PS C:\> .\ConsoleApplication8.exe
15621414
1001066
1001218
PS C:\>
結論: GetLocalTimeは約1秒なのでこの環境(Win10+ハード)では1ms程度の分解能がある
感想: 誤差大きい
408デフォルトの名無しさん
2021/09/20(月) 07:46:32.11ID:Pqsh6MJQ ここはWindowsAPIスレになったのか
409デフォルトの名無しさん
2021/09/20(月) 07:51:13.46ID:l/aXhlvm スレタイも読めない、検索できないやつがまともなプログラム書けるはずもなく・・・
410デフォルトの名無しさん
2021/09/20(月) 07:52:13.05ID:Mm5TpRqo windows API使いたがるひとがいてめんどくさい
こっちはなるべく標準のc++使いたいのに
こっちはなるべく標準のc++使いたいのに
411デフォルトの名無しさん
2021/09/20(月) 08:19:53.25ID:VgAULHWI POSIXと比べるとクソ過ぎて話にならんよな
412デフォルトの名無しさん
2021/09/20(月) 10:01:57.22ID:LqQpPYvk プラットフォーム固有の話も参考になる
今回の流れは Win32 API と std::chrono の違いが端緒だしスレ違いというほどではない
今回の流れは Win32 API と std::chrono の違いが端緒だしスレ違いというほどではない
413デフォルトの名無しさん
2021/09/20(月) 10:48:50.60ID:T+6xg0LJ そのクソがなんで一番利用者多いのか考えてみろ
414デフォルトの名無しさん
2021/09/20(月) 11:24:41.17ID:VgAULHWI バカに合わせてるからだろ
言わせんなよ恥ずかしい
言わせんなよ恥ずかしい
415ハノン ◆QZaw55cn4c
2021/09/20(月) 11:26:09.83ID:+hQanlE4 私馬鹿よねーお馬鹿さんよねー今日も win32api
416デフォルトの名無しさん
2021/09/20(月) 11:30:28.88ID:DnvAIBnA とりあえず動かないから面白くないということなのかもなということで、Linuxのclock_gettimeにも対応しといた。
BSDとmac組は知らん。
https://ideone.com/Z9CfOo
一応WIN32はあえて低解像度のを計測してるという点だけは補足しておきます。
BSDとmac組は知らん。
https://ideone.com/Z9CfOo
一応WIN32はあえて低解像度のを計測してるという点だけは補足しておきます。
417デフォルトの名無しさん
2021/09/20(月) 12:15:53.36ID:rmuhdvcF timeBeginPeriod
木屋さん元気かな
木屋さん元気かな
418デフォルトの名無しさん
2021/09/20(月) 12:28:29.25ID:26DwFCZj 元の質問見てないけどQPCでええんちゃうの
419デフォルトの名無しさん
2021/09/20(月) 12:45:29.78ID:DnvAIBnA >>417
スレッドのスケジューリングも変化するので注意です。
tickとはそもそもそういうものでしたが。
http://archive.linux.or.jp/JF/JFdocs/The-Linux-Kernel-20.html
>>418
>>395でそう言ったし、high_resolution_clockで使用されてるのもそれ
スレッドのスケジューリングも変化するので注意です。
tickとはそもそもそういうものでしたが。
http://archive.linux.or.jp/JF/JFdocs/The-Linux-Kernel-20.html
>>418
>>395でそう言ったし、high_resolution_clockで使用されてるのもそれ
420デフォルトの名無しさん
2021/09/20(月) 12:51:33.23ID:VgAULHWI CreateWaitableTimerEx(NULL,NULL,CREATE_WAITABLE_TIMER_HIGH_RESOLUTION,TIMER_ALL_ACCESS)
421デフォルトの名無しさん
2021/09/20(月) 13:22:11.61ID:DnvAIBnA422デフォルトの名無しさん
2021/09/20(月) 13:58:28.71ID:VgAULHWI バカか
計測するなら精度高めないと意味ないだろ
計測するなら精度高めないと意味ないだろ
423デフォルトの名無しさん
2021/09/20(月) 14:31:11.65ID:LO5PkHvF そもそもパフォーマンスの計測に使うなんて言ってなくない?
424デフォルトの名無しさん
2021/09/20(月) 16:05:39.48ID:DnvAIBnA >>422
この例はExついてないけど、こういう使い方をするものなんだよ。
待機可能タイマー オブジェクトの使用 - Win32 apps | Microsoft Docs
https://docs.microsoft.com/ja-jp/windows/win32/sync/using-waitable-timer-objects
>>423
>>388で求めているのは正確には時刻取得だね。つまりsystem_clockの話。
俺がしてるのは時間計測なのでsteady_clockの話。
違いは時刻の修正などにより増減するかしないかという特性の違いと、それを実現するHWタイマの分解能/性能の違い。
GetLocalTimeの分解能は文書にも記述がなく、>>393の指摘だけで事実関係が不明なまま宙に浮いてたので、>>416などでそれを計測した。
ここでは10〜15.6msの出元であるGetTickCountもついでに計測した。
steady_clockとsystem_clockをどこかで同時に取得して、steady_clockの分解能のまま時刻っぽいものを得るみたいなことも短期的には現実的な精度でできなくはないけど。
この例はExついてないけど、こういう使い方をするものなんだよ。
待機可能タイマー オブジェクトの使用 - Win32 apps | Microsoft Docs
https://docs.microsoft.com/ja-jp/windows/win32/sync/using-waitable-timer-objects
>>423
>>388で求めているのは正確には時刻取得だね。つまりsystem_clockの話。
俺がしてるのは時間計測なのでsteady_clockの話。
違いは時刻の修正などにより増減するかしないかという特性の違いと、それを実現するHWタイマの分解能/性能の違い。
GetLocalTimeの分解能は文書にも記述がなく、>>393の指摘だけで事実関係が不明なまま宙に浮いてたので、>>416などでそれを計測した。
ここでは10〜15.6msの出元であるGetTickCountもついでに計測した。
steady_clockとsystem_clockをどこかで同時に取得して、steady_clockの分解能のまま時刻っぽいものを得るみたいなことも短期的には現実的な精度でできなくはないけど。
425デフォルトの名無しさん
2021/09/25(土) 05:50:44.21ID:B+D0wTVh 3種類ぐらいのタイマの時刻が1000回変化するのに要するトータル時間Tを測っているらしいが
この計測結果からSYSTEMTIMEの分解能がHWタイマの分解能/性能の違いに起因すると結論づけることはできない
実態は>>375な計り方でst1: SYSTEMTIME、now: nowtime_point、st2: SYSTEMTIME、の順で立て続けに時間をとると
>>388の通り
st1 ≦ now && now ≦ st2 + 1 ms
という結果なわけで、この「1 ms(<15.6 ms)というのは本当にハードウェアタイマの分解能なんかい話が違うぞ?!」と詰問されて
答えに窮する>>424な未来が見える見えまくり
この計測結果からSYSTEMTIMEの分解能がHWタイマの分解能/性能の違いに起因すると結論づけることはできない
実態は>>375な計り方でst1: SYSTEMTIME、now: nowtime_point、st2: SYSTEMTIME、の順で立て続けに時間をとると
>>388の通り
st1 ≦ now && now ≦ st2 + 1 ms
という結果なわけで、この「1 ms(<15.6 ms)というのは本当にハードウェアタイマの分解能なんかい話が違うぞ?!」と詰問されて
答えに窮する>>424な未来が見える見えまくり
426デフォルトの名無しさん
2021/09/25(土) 05:55:32.54ID:B+D0wTVh427デフォルトの名無しさん
2021/09/25(土) 06:02:51.16ID:B+D0wTVh ごめ、Sleep(1000)を入れたのではOSにプリエンプションの機会を与えてしまうからNG
正しくは
GetSystemTime(&st1);
15.6 ms未満のビジーループ <== 訂正
now = system_clock::now();
GetSystemTime(&st2);
とすると、
st1 ≦ now && now ≦ st2 + 15.6 ms
にnowの精度が劣化する、に訂正
OSのAPIもプリエンプションの機会にならない保証が無いのでビジーループはガチでビジーループで作る必要があり、
面倒なのでやらないがな!
正しくは
GetSystemTime(&st1);
15.6 ms未満のビジーループ <== 訂正
now = system_clock::now();
GetSystemTime(&st2);
とすると、
st1 ≦ now && now ≦ st2 + 15.6 ms
にnowの精度が劣化する、に訂正
OSのAPIもプリエンプションの機会にならない保証が無いのでビジーループはガチでビジーループで作る必要があり、
面倒なのでやらないがな!
428デフォルトの名無しさん
2021/09/25(土) 07:18:10.24ID:B+D0wTVh といいつつAPIに頼らずに10 ms規模のビジーループ(ビジーウェイト)させるのはやや技巧を要すると思ったので漏れが自らやってやった、
https://ideone.com/CjXN4X
※ 計測の実行は要Windows
結果、1 ms、8 ms、16 ms、1秒のどれに変えても>>388と同じで、
std::chrono::now()の時刻nowに対し、その直後にGetSystemTime()で得た時刻st2が
1 msだけ追い越されることはあっても決して 1 msより大きく追い越されることは無かったorz
なぜじゃ闇が深いなこれ、
もちろんGetSystemTime()ではなくGetSystemTimePreciseAsFileTime()を使う(↑のソースコードのPRECISE_AS_FILETIMEマクロ定義を有効化する
と>>398の通りドンピシャな時刻順になる点はビジーウェイトがあっても変わらない。
GetSystemTime()のふるまいが一方的に謎杉
https://ideone.com/CjXN4X
※ 計測の実行は要Windows
結果、1 ms、8 ms、16 ms、1秒のどれに変えても>>388と同じで、
std::chrono::now()の時刻nowに対し、その直後にGetSystemTime()で得た時刻st2が
1 msだけ追い越されることはあっても決して 1 msより大きく追い越されることは無かったorz
なぜじゃ闇が深いなこれ、
もちろんGetSystemTime()ではなくGetSystemTimePreciseAsFileTime()を使う(↑のソースコードのPRECISE_AS_FILETIMEマクロ定義を有効化する
と>>398の通りドンピシャな時刻順になる点はビジーウェイトがあっても変わらない。
GetSystemTime()のふるまいが一方的に謎杉
429デフォルトの名無しさん
2021/09/25(土) 08:12:02.95ID:HzR9ZlyY WinAPIスレに持っていってくれますか?
結局<chrono>に固有の問題(?)ではなくて背後のAPI関数に関することって分かったはずなんで
結局<chrono>に固有の問題(?)ではなくて背後のAPI関数に関することって分かったはずなんで
430デフォルトの名無しさん
2021/09/25(土) 08:44:57.34ID:HzR9ZlyY とか言いつつ自分で探してきたので貼っちゃう……
GetSystemTimeの分解能が15.6msというのはXPまでの話らしい
https://www.thedelphigeek.com/2007/10/calculating-accurate.html
GetSystemTimeの分解能が15.6msというのはXPまでの話らしい
https://www.thedelphigeek.com/2007/10/calculating-accurate.html
431デフォルトの名無しさん
2021/09/25(土) 09:20:27.88ID:ZWKkb85T432デフォルトの名無しさん
2021/09/25(土) 17:45:16.21ID:+JZgAVsh > プリエンプションの機会
機会を与えないことができるのは昔のWindowsだろ
機会を与えないことができるのは昔のWindowsだろ
433デフォルトの名無しさん
2021/09/25(土) 18:35:43.94ID:8CcFj4Yb 今だって邪魔できるよ
消極的ではあるけど
消極的ではあるけど
434デフォルトの名無しさん
2021/09/25(土) 18:44:00.64ID:+JZgAVsh 割り込み禁止命令が実行できたり
割り込みコントローラにコマンド出せたりする
デバドラかMODESETみたいのないと無理だよ
割り込みコントローラにコマンド出せたりする
デバドラかMODESETみたいのないと無理だよ
435デフォルトの名無しさん
2021/09/26(日) 12:46:15.93ID:9lvhFgGq std::complex<double> の変数 a, b について、OpenMP の並列リージョン内での
#pragma omp atomic
a += b;
が
error: invalid expression type for '#pragma omp atomic'
というエラーを出すんですが、std::complex はアトミック演算の対象外ですか?
それとも他の何かを見落としてる可能性がある?
#pragma omp atomic
a += b;
が
error: invalid expression type for '#pragma omp atomic'
というエラーを出すんですが、std::complex はアトミック演算の対象外ですか?
それとも他の何かを見落としてる可能性がある?
436デフォルトの名無しさん
2021/09/26(日) 13:03:13.46ID:4UIlewCz ompのAPI仕様書を読むと対象はスカラー型のみって書いてあるから対象外なんじゃないの?
437デフォルトの名無しさん
2021/09/26(日) 13:04:21.25ID:4UIlewCz ここのx and vってとこ
https://www.openmp.org/spec-html/5.0/openmpsu95.html
https://www.openmp.org/spec-html/5.0/openmpsu95.html
438デフォルトの名無しさん
2021/09/26(日) 13:07:22.68ID:9lvhFgGq 数学とか物理の用語としては複素数はスカラーですが、コンピューター用語としては違うんでしたっけ?
439デフォルトの名無しさん
2021/09/26(日) 13:18:19.13ID:loHIOGgF 確かモルダーを疲れさせる女のこと
440デフォルトの名無しさん
2021/09/26(日) 13:28:55.11ID:pztAGZv/ 対象外
ぷりみ恥部とPOD以外だめ
ぷりみ恥部とPOD以外だめ
441デフォルトの名無しさん
2021/09/26(日) 14:59:44.58ID:4UIlewCz >>438
std::complexはclass型だよ。c++では
std::complexはclass型だよ。c++では
442デフォルトの名無しさん
2021/09/26(日) 15:02:24.84ID:9lvhFgGq443はちみつ餃子 ◆8X2XSCHEME
2021/09/27(月) 00:54:20.59ID:vtQXnC4F >>438
C++ におけるスカラ型の定義
・ 算術型 (整数型と浮動小数点数型)
・ 列挙型
・ ポインタ型
・ メンバへのポインタ型
・ std::nullptr_t
・ 以上を cv 修飾 (const や volatile で修飾) したもの
https://timsong-cpp.github.io/cppwp/n3337/basic.types#9
言語によって定義は異なっている (または定義を持たない) ので
コンピューター用語として一般化は出来ないと思う。
C++ におけるスカラ型の定義
・ 算術型 (整数型と浮動小数点数型)
・ 列挙型
・ ポインタ型
・ メンバへのポインタ型
・ std::nullptr_t
・ 以上を cv 修飾 (const や volatile で修飾) したもの
https://timsong-cpp.github.io/cppwp/n3337/basic.types#9
言語によって定義は異なっている (または定義を持たない) ので
コンピューター用語として一般化は出来ないと思う。
444デフォルトの名無しさん
2021/09/27(月) 06:07:00.04ID:vzE92GBt ここはC++スレだからC++用語で必要充分だ
無理に一般化する必要はない
無理に一般化する必要はない
445デフォルトの名無しさん
2021/09/27(月) 08:56:19.98ID:P6ytpwfT 複素数が「算術型」じゃないのって冷静に考えるの結構奇妙だな
446デフォルトの名無しさん
2021/09/27(月) 19:18:30.57ID:LR1S7vXs 複素数を直接扱う命令がないCPUが多い以上、小数2個で表される複素数がスカラではないのは自然だと思うけど
それを言い出すと、一般線形群と呼ばれる行列はなんでも算術型になるのではないか?と思えてくるし
それを言い出すと、一般線形群と呼ばれる行列はなんでも算術型になるのではないか?と思えてくるし
447デフォルトの名無しさん
2021/09/27(月) 19:25:38.25ID:n9hc+rIL arithmeticを「算術」とか仰々しく訳すからおかしくなる
要は小学生がさんすうで習うような単純な数のことよ
要は小学生がさんすうで習うような単純な数のことよ
448デフォルトの名無しさん
2021/09/27(月) 22:16:24.75ID:D7AKGDxr そもそも数学でも複素数はスカラじゃないよな
449デフォルトの名無しさん
2021/09/27(月) 22:19:03.53ID:sGjfmd1K ベクトルの係数になるんだから基本的にスカラじゃねえの
450デフォルトの名無しさん
2021/09/27(月) 22:43:23.51ID:PI7czi9F スカラーだったりベクトルだったりするらしい
http://izumi-math.jp/K_Manabe/what_v/what_v_3.htm
http://izumi-math.jp/K_Manabe/what_v/what_v_3.htm
451デフォルトの名無しさん
2021/09/27(月) 22:51:45.61ID:GPisoDJi 複素ベクトル空間の係数体の元として見ればスカラだし複素数体を実ベクトル空間と見れば複素数は実ベクトル
452デフォルトの名無しさん
2021/09/28(火) 07:58:37.24ID:ZoUlFxaV 除算が定義できる体なので普通はスカラーとして扱うと思うけどな。
2要素の実ベクトルや2自由度の行列に適切な演算を導入することによって同一視することはできる。
2要素の実ベクトルや2自由度の行列に適切な演算を導入することによって同一視することはできる。
453デフォルトの名無しさん
2021/09/29(水) 10:21:13.97ID:QYKzykPR >>447
要は小学生がさんすうで習うような単純な数のことを「算術」と言うんだが
要は小学生がさんすうで習うような単純な数のことを「算術」と言うんだが
454ハノン ◆QZaw55cn4c
2021/09/29(水) 18:51:49.92ID:+NS+8RdU455デフォルトの名無しさん
2021/09/29(水) 19:37:07.20ID:F6bYTA4Q 好きなX^2=-Iを満たす行列Xを用意すればaI+bXが複素数の表現になるよ
456デフォルトの名無しさん
2021/09/30(木) 04:33:42.15ID:a96KQdEj457デフォルトの名無しさん
2021/09/30(木) 10:27:42.19ID:rsDh5L5E i 0
0 i
0 i
458デフォルトの名無しさん
2021/09/30(木) 12:07:05.65ID:CrfxKotF 複素数z=x+iy (x, y:実数)とした場合どうやって行列で表現できるのか分からん
そもそも無理だろ
そもそも無理だろ
459デフォルトの名無しさん
2021/09/30(木) 12:15:59.67ID:LH+TfD4u いい加減スレチだぞお前ら
460デフォルトの名無しさん
2021/09/30(木) 12:39:55.75ID:HqpdIwHE 複素数の実行列表現あたりで調べれば出てくるから自分で調べろ。
複素数ライブラリの実装は行列表現だろ。
複素数ライブラリの実装は行列表現だろ。
461デフォルトの名無しさん
2021/09/30(木) 14:36:41.46ID:rqtJMe+2 承認欲求が満たされなかったキチガイのハ◯ンが荒らしてるんだな
462ハノン ◆QZaw55cn4c
2021/09/30(木) 21:06:22.87ID:SS5VJirH463デフォルトの名無しさん
2021/09/30(木) 22:32:11.42ID:hyVGcxZ+ 複素数ライブラリの実装が行列表現な訳ないだろ
464デフォルトの名無しさん
2021/10/01(金) 04:28:27.07ID:YSb3+a7i パウリ行列やで
465デフォルトの名無しさん
2021/10/01(金) 08:55:53.93ID:wyBR1P+Z それは四元数では
466デフォルトの名無しさん
2021/10/01(金) 11:45:26.96ID:o+E+DUKy そもそも勝手な演算❎とかを用意して、それを複素数の演算になるような演算規則にすればいいだけの話
普通のプログラミング言語での実装は2要素ベクトルに対して複素数積となるような演算を*に対応させているんだと思うけどな
行列積が複素数の積と同一視できるような表現行列があるというだけ
群論とか環論とか体論とか入門的にでもやればわかるよ
普通のプログラミング言語での実装は2要素ベクトルに対して複素数積となるような演算を*に対応させているんだと思うけどな
行列積が複素数の積と同一視できるような表現行列があるというだけ
群論とか環論とか体論とか入門的にでもやればわかるよ
467デフォルトの名無しさん
2021/10/02(土) 13:55:46.16ID:cR/mfYmg ベクトルの要素は座標変換で変わるからスカラーではない
468デフォルトの名無しさん
2021/10/02(土) 13:59:33.99ID:cR/mfYmg まつがえたorz
誤: 変わるから
正: 変化すっから
誤: 変わるから
正: 変化すっから
469デフォルトの名無しさん
2021/10/02(土) 14:34:20.70ID:7v0dyN4q 物理屋さんか?
470デフォルトの名無しさん
2021/10/02(土) 14:56:43.55ID:cR/mfYmg んまーたしかに物理現象は座標変換しても変わらない(同じもの)とみなすのが
物理の先生なのかもしれん スカラーもそん延長線上の概念
しかし観測が系に影響を与えると言い出した時点でいつまで真理でありつづけることやら……
物理の先生なのかもしれん スカラーもそん延長線上の概念
しかし観測が系に影響を与えると言い出した時点でいつまで真理でありつづけることやら……
471デフォルトの名無しさん
2021/10/02(土) 20:42:45.96ID:xJ5F1jwy >>467
言葉足らずだったかもしれないが、複素数体と数学的にはR2の正規直交基底かつ基底の長さが1のベクトルの成分表示を、適切な演算を入れることによって同一視することができるという話をしているのであって、一般的なベクトル空間の話をしている訳ではない。
言葉足らずだったかもしれないが、複素数体と数学的にはR2の正規直交基底かつ基底の長さが1のベクトルの成分表示を、適切な演算を入れることによって同一視することができるという話をしているのであって、一般的なベクトル空間の話をしている訳ではない。
472デフォルトの名無しさん
2021/10/02(土) 21:15:26.25ID:cR/mfYmg スカラーか否かというのは数をどこに使うかの話であって
数をどう表現するかの話ではないし、
数をどう表現するかの話ではないし、
473デフォルトの名無しさん
2021/10/02(土) 21:16:10.17ID:cR/mfYmg それはそうとしてR^2と言っただけでは計量が入っていないから(平行移動も糞も無いため)ベクトル空間ではない
つまり { ベクトル空間 } ⊂ { R^2 } であってR^2の方がより一般的
R^2上で実数と同じ7つの演算則を満たす演算を形式的に定義することはできるが|i|=1を表すために
>正規直交基底かつ基底の長さが1のベクトルの成分表示
が必要になるから複素数体を正確に言い表すにはR^2ではなくてユークリッド空間か何かが要ることになるんじゃないの
つまり { ベクトル空間 } ⊂ { R^2 } であってR^2の方がより一般的
R^2上で実数と同じ7つの演算則を満たす演算を形式的に定義することはできるが|i|=1を表すために
>正規直交基底かつ基底の長さが1のベクトルの成分表示
が必要になるから複素数体を正確に言い表すにはR^2ではなくてユークリッド空間か何かが要ることになるんじゃないの
474デフォルトの名無しさん
2021/10/02(土) 22:42:32.17ID:5uoG6j9g 加法(V × V → V)と係数体による倍演算(K × V → V)が入ってて線型ならベクトル空間だよ, 計量入れたら計量ベクトル空間
475デフォルトの名無しさん
2021/10/05(火) 17:00:23.30ID:YgA3J5wy 関数の引数に参照渡しで何も渡さないようにするはどうすればよいですか
自作クラスAがあったとして、それを引数にとる関数
void hoge(int& p1, A& p2)
があります。
ただ、p2は、ケースによっては要らない場合もあって、その場合にはどうすればよいですか。
調べてみたらnullptrみたいなのはあったので、
int p1 = 1;
hoge(p1, nullptr);
と書いてみても、
非constの左辺が何とかとエラーが出て、渡せませんでした。
自作クラスAがあったとして、それを引数にとる関数
void hoge(int& p1, A& p2)
があります。
ただ、p2は、ケースによっては要らない場合もあって、その場合にはどうすればよいですか。
調べてみたらnullptrみたいなのはあったので、
int p1 = 1;
hoge(p1, nullptr);
と書いてみても、
非constの左辺が何とかとエラーが出て、渡せませんでした。
476デフォルトの名無しさん
2021/10/05(火) 17:34:05.28ID:lBT+65cn *nullptr
477はちみつ餃子 ◆8X2XSCHEME
2021/10/05(火) 17:41:01.80ID:krkmojOq >>475
参照は何も参照していない状態というのは作れない。
参照で受け取るように書いてあればその参照が無効ということはあり得ないという表明として解釈するのが通例。
(実際にはダングリング参照はあり得るけどそれは単に間違ったプログラムなので気にしない。)
引数として不要なのであればオーバーロードで引数が不要な関数も用意するのが真っ当な方法だけれど、
どうしても無効ということを表す状態を渡したいということであればダミーのオブジェクトを作っておいて
それを無効の意味に使うという方法は考えられる。 (不格好だけど……。)
#include <iostream>
struct A {};
A dummy;
void hoge(int& p1, A& p2 = dummy) {
if(&dummy == &p2) std::cout << "p2 is dummy" << std::endl;
else std::cout << "p2 is not dummy" << std::endl;
}
int main(void) {
int foo = 1;
A bar;
hoge(foo, bar);
hoge(foo);
}
あるいは std::variant と std::monostate と std::ref を組み合わせれば表現できなくもないかなぁ……。
参照は何も参照していない状態というのは作れない。
参照で受け取るように書いてあればその参照が無効ということはあり得ないという表明として解釈するのが通例。
(実際にはダングリング参照はあり得るけどそれは単に間違ったプログラムなので気にしない。)
引数として不要なのであればオーバーロードで引数が不要な関数も用意するのが真っ当な方法だけれど、
どうしても無効ということを表す状態を渡したいということであればダミーのオブジェクトを作っておいて
それを無効の意味に使うという方法は考えられる。 (不格好だけど……。)
#include <iostream>
struct A {};
A dummy;
void hoge(int& p1, A& p2 = dummy) {
if(&dummy == &p2) std::cout << "p2 is dummy" << std::endl;
else std::cout << "p2 is not dummy" << std::endl;
}
int main(void) {
int foo = 1;
A bar;
hoge(foo, bar);
hoge(foo);
}
あるいは std::variant と std::monostate と std::ref を組み合わせれば表現できなくもないかなぁ……。
478デフォルトの名無しさん
2021/10/05(火) 17:45:03.34ID:UD2fraRe NullObjectパターンすね
479デフォルトの名無しさん
2021/10/05(火) 17:48:18.95ID:lBT+65cn hoge(p1,* static_cast<A*>(nullptr));
480デフォルトの名無しさん
2021/10/05(火) 17:49:14.63ID:3jRalumJ481はちみつ餃子 ◆8X2XSCHEME
2021/10/05(火) 17:52:23.11ID:krkmojOq482デフォルトの名無しさん
2021/10/05(火) 19:00:16.73ID:lBT+65cn 何いってんだ
キチンと動作する
ただの参照なんだから未定義じゃないだろ
他の変数に受け渡してるワケでもないし
キチンと動作する
ただの参照なんだから未定義じゃないだろ
他の変数に受け渡してるワケでもないし
483はちみつ餃子 ◆8X2XSCHEME
2021/10/05(火) 19:59:32.04ID:krkmojOq >>482
実質的な (コンパイルされた後の) 動作として値を取り出す必要がないというのは、
言語仕様上において * の適用を無かったことに出来るわけではない。
(C には単項 * の結果に単項 & を適用した場合に相殺されてどちらも無かったことになる規則があるが……。)
実質的な (コンパイルされた後の) 動作として値を取り出す必要がないというのは、
言語仕様上において * の適用を無かったことに出来るわけではない。
(C には単項 * の結果に単項 & を適用した場合に相殺されてどちらも無かったことになる規則があるが……。)
484デフォルトの名無しさん
2021/10/05(火) 20:26:29.70ID:SwNxahaG また未定義動作なんか怖くない君か
命知らずなのはいいけどチームプログラミングには関わらないでね本当に迷惑だから
命知らずなのはいいけどチームプログラミングには関わらないでね本当に迷惑だから
485デフォルトの名無しさん
2021/10/05(火) 20:32:26.64ID:7rL/DhC7 1. 参照をやめてポインタにする
2. std::optional<T>を使う(C++17以降)
俺ならこのどっちか
2. std::optional<T>を使う(C++17以降)
俺ならこのどっちか
486デフォルトの名無しさん
2021/10/05(火) 22:18:37.99ID:bhHmmGon487デフォルトの名無しさん
2021/10/05(火) 22:24:32.10ID:bhHmmGon もちろんT固有のnull「値」の定義においては
オブジェクトの参照 == null値、
はアドレスの一致ではなく値の一致として解釈されねばならな
い
オブジェクトの参照 == null値、
はアドレスの一致ではなく値の一致として解釈されねばならな
い
488デフォルトの名無しさん
2021/10/05(火) 22:44:53.78ID:bhHmmGon さもないと、クラスTのnull値をT_NULLみたいな名前にしたとして、
T arr[] = { T_NULL, T_NULL, T_NULL, T_NULL };
みたいなことができないか
らな
T arr[] = { T_NULL, T_NULL, T_NULL, T_NULL };
みたいなことができないか
らな
489デフォルトの名無しさん
2021/10/06(水) 00:36:12.25ID:meWA0K5y >>480,482
gcc 11 の -O2 で「&p2==nullptrでnullptrが渡されたかどうかチェック」はできなかった。
https://wandbox.org/permlink/c9QQIkFRPpFHd7rL
gcc 11 の -O2 で「&p2==nullptrでnullptrが渡されたかどうかチェック」はできなかった。
https://wandbox.org/permlink/c9QQIkFRPpFHd7rL
490デフォルトの名無しさん
2021/10/06(水) 00:55:04.49ID:E9G/hK4q void hoge(int& p1, optional<A>& p2 = nullopt) { // constじゃないのでエラー
みたいなことってoptionalで上手いことやる方法ないの?
呼び出し元は
int i;
A a;
hoge(i, a);
hoge(i);
みたいな感じで
書き換えられるけどhogeから抜けたら消える初期値nulloptのoptional<A>をデフォルト値で渡せるのか知りたい
みたいなことってoptionalで上手いことやる方法ないの?
呼び出し元は
int i;
A a;
hoge(i, a);
hoge(i);
みたいな感じで
書き換えられるけどhogeから抜けたら消える初期値nulloptのoptional<A>をデフォルト値で渡せるのか知りたい
491デフォルトの名無しさん
2021/10/06(水) 01:23:25.11ID:V3EBITWg なにいってんだおめ
492デフォルトの名無しさん
2021/10/06(水) 01:31:37.67ID:V3EBITWg nullopt以外が渡されたらそのA&に対して、
nulloptが渡されたらスタックにAを構築したうえでそのA&に対して操作したい、ってこと?
それはvoid hoge(int& p1, A& p2 = デフォルト値)でいけるんじゃないかい
nulloptが渡されたらスタックにAを構築したうえでそのA&に対して操作したい、ってこと?
それはvoid hoge(int& p1, A& p2 = デフォルト値)でいけるんじゃないかい
493デフォルトの名無しさん
2021/10/06(水) 01:49:32.28ID:E9G/hK4q 伝わらないようなので、コード書きました
https://wandbox.org/permlink/HyOX0jEBR4glCT01
https://wandbox.org/permlink/HyOX0jEBR4glCT01
494はちみつ餃子 ◆8X2XSCHEME
2021/10/06(水) 03:08:52.59ID:3d8zh1Pt >>493
やりたいことは std::optional<A>& ではなくて std::optional<A&> 的なことだろ。
しかし std::optional は参照を保持できないのでそういうときのために std::reference_wrapper がある。
コードにしたらこんな感じ。
https://wandbox.org/permlink/qEaoGDWFh7LmzE4m
やりたいことは std::optional<A>& ではなくて std::optional<A&> 的なことだろ。
しかし std::optional は参照を保持できないのでそういうときのために std::reference_wrapper がある。
コードにしたらこんな感じ。
https://wandbox.org/permlink/qEaoGDWFh7LmzE4m
495デフォルトの名無しさん
2021/10/06(水) 06:31:33.91ID:lNsYT/rw 部分特殊化できないのは関数テンプレートだよな
template<class T1, class T2>
struct test {
void fig1();
void fig2();
void fig3();
};
template< > void test<void, void>::fig1(); //ok
template<class T1> void test<T1 , void>::fig2(); //error
template<class T2> void test<void, T2 >::fig3(); //error
クラステンプレートなのに弾かれるのは何で?
template<class T1, class T2>
struct test {
void fig1();
void fig2();
void fig3();
};
template< > void test<void, void>::fig1(); //ok
template<class T1> void test<T1 , void>::fig2(); //error
template<class T2> void test<void, T2 >::fig3(); //error
クラステンプレートなのに弾かれるのは何で?
496デフォルトの名無しさん
2021/10/06(水) 06:43:32.28ID:Cv4NDZSF その部分特殊化されたtest(構造体)が定義されてないからだね
先にtestの部分特殊化を書けば通る
先にtestの部分特殊化を書けば通る
497デフォルトの名無しさん
2021/10/06(水) 07:59:10.51ID:E9G/hK4q >>494
std::reference_wrapperは知りませんでした
std::optional<A>をstd::optional<A*>にしてconstのままいじれるようにした気分なので
実質無理ってことなのかなぁと思いますが…
ありがとうございます
std::reference_wrapperは知りませんでした
std::optional<A>をstd::optional<A*>にしてconstのままいじれるようにした気分なので
実質無理ってことなのかなぁと思いますが…
ありがとうございます
498デフォルトの名無しさん
2021/10/06(水) 08:17:01.00ID:fON1wZ9Y >>475
普通はオーバーロードだな。デフォルトを指定させたいのならnullobjectを始めとする定数オブジェクトかね。
nullポインタとか空のスマートポインタとかはエラーの元だから避けたいところ。
普通はオーバーロードだな。デフォルトを指定させたいのならnullobjectを始めとする定数オブジェクトかね。
nullポインタとか空のスマートポインタとかはエラーの元だから避けたいところ。
499デフォルトの名無しさん
2021/10/06(水) 08:26:08.77ID:E9G/hK4q500デフォルトの名無しさん
2021/10/06(水) 08:34:45.86ID:4yqQ2QZ4 今は継承はなるべく使わない、がデフォなのかな
501デフォルトの名無しさん
2021/10/06(水) 09:11:04.83ID:lTl3I+RT クラステンプレートがナウい
502デフォルトの名無しさん
2021/10/06(水) 09:13:14.40ID:lTl3I+RT とはいえ、いきなりテンプレートにするのはハードル高いので、
結局は、継承クラスをいくつか作ってみてテンプレート化を試すことになる
結局は、継承クラスをいくつか作ってみてテンプレート化を試すことになる
503デフォルトの名無しさん
2021/10/06(水) 09:41:21.39ID:DE23Rkof504デフォルトの名無しさん
2021/10/06(水) 10:03:37.43ID:7OUEgWer505デフォルトの名無しさん
2021/10/06(水) 10:45:35.19ID:Cv4NDZSF デフォとかナウいとかアホかと
506デフォルトの名無しさん
2021/10/06(水) 12:20:32.60ID:iqYhGyd9 最適化オプションの違いで挙動が変わるようなコードはそもそもダメだって理解してくれよ
507デフォルトの名無しさん
2021/10/06(水) 13:11:05.10ID:BBSbIN5v インテルコンパイラはもう規格満たしてないだろってくらい滅茶苦茶に挙動を変える
gccなら、最適化で結果が変わるようなコードはダメコードと言って良いと思う
gccなら、最適化で結果が変わるようなコードはダメコードと言って良いと思う
508デフォルトの名無しさん
2021/10/08(金) 05:56:22.58ID:Xasiu/5n >>496
遅レスすまそ
testなら部分特殊化できるのはわかるんだが
その場合クラス定義の全部を書き直すよな
template<class T1>
struct test<T1, void>
{
void fig1();
void fig2(); //特殊化したいのはここだけ
void fig3();
};
fig1とfig3を一次テンプレートと同じ内容で
書き直さにゃならんかね
遅レスすまそ
testなら部分特殊化できるのはわかるんだが
その場合クラス定義の全部を書き直すよな
template<class T1>
struct test<T1, void>
{
void fig1();
void fig2(); //特殊化したいのはここだけ
void fig3();
};
fig1とfig3を一次テンプレートと同じ内容で
書き直さにゃならんかね
509デフォルトの名無しさん
2021/10/08(金) 23:05:08.47ID:xNy0cJty 関数テンプレート内でラムダ式使おうとしたらコンパイルできない
template<class T> void hoge(){
auto func = [](){return 0;};
}
int main(){
hoge<int>();
return 0;
}
in instantiation of function template specialization 'hoge<int>' requested here
と出るが、何がだめなのかよくわからん
template<class T> void hoge(){
auto func = [](){return 0;};
}
int main(){
hoge<int>();
return 0;
}
in instantiation of function template specialization 'hoge<int>' requested here
と出るが、何がだめなのかよくわからん
510はちみつ餃子 ◆8X2XSCHEME
2021/10/08(金) 23:18:07.74ID:ZAq25yo3 >>509
そのメッセージは「関数テンプレートはここで特殊化 (テンプレート引数を当てはめて具体的な型に展開) されたやで」
というメッセージで、普通は他の警告やエラーの補足として出てくる。 なんか警告が一緒に出てない?
func が定義されとるけど使ってないという警告は出てくるけど無視して問題ない警告なのでコンパイルできないってことはない。
警告をエラー扱いにするオプションを付けてたりしない?
そのメッセージは「関数テンプレートはここで特殊化 (テンプレート引数を当てはめて具体的な型に展開) されたやで」
というメッセージで、普通は他の警告やエラーの補足として出てくる。 なんか警告が一緒に出てない?
func が定義されとるけど使ってないという警告は出てくるけど無視して問題ない警告なのでコンパイルできないってことはない。
警告をエラー扱いにするオプションを付けてたりしない?
511デフォルトの名無しさん
2021/10/08(金) 23:23:01.42ID:awgtN1Ul512はちみつ餃子 ◆8X2XSCHEME
2021/10/08(金) 23:28:30.45ID:ZAq25yo3513デフォルトの名無しさん
2021/10/09(土) 21:11:49.30ID:PhB5rfBq あるラムダ式が他のラムダ式をコピーするとき、参照キャプチャにするかコピーキャプチャにするか迷うんですが、皆さんはどういう基準で決められてますか
514デフォルトの名無しさん
2021/10/09(土) 21:14:22.61ID:yAn344zh515デフォルトの名無しさん
2021/10/09(土) 21:17:39.52ID:yAn344zh516デフォルトの名無しさん
2021/10/10(日) 01:44:21.88ID:qGt3mQky 破壊的代入の余地が無いようする
つまりコピーを第一の選択肢として考えるする
つまりコピーを第一の選択肢として考えるする
517デフォルトの名無しさん
2021/10/10(日) 01:50:32.12ID:qGt3mQky *thisはさすがに参照にすることが多いが(だいたいコピコンがあるとも限らないし、
とはいえ参照コピーしてパラメータに対する破壊的代入を許すと思想的に重箱読みになって気持ち悪い気がするし、
参照渡ししたオブジェクトは一般にスレッドローカルとは言い切れなくなることから
スレッドセーフと断言しにくくなるというのは実害に数えて良いと思う
入れ子になったラムダ式の奥深くでそれをやられると、いつ排他制御すべきなのかが全くワケワカメになりかねない
とはいえ参照コピーしてパラメータに対する破壊的代入を許すと思想的に重箱読みになって気持ち悪い気がするし、
参照渡ししたオブジェクトは一般にスレッドローカルとは言い切れなくなることから
スレッドセーフと断言しにくくなるというのは実害に数えて良いと思う
入れ子になったラムダ式の奥深くでそれをやられると、いつ排他制御すべきなのかが全くワケワカメになりかねない
518デフォルトの名無しさん
2021/10/10(日) 04:41:44.62ID:/ScOmKIj519デフォルトの名無しさん
2021/10/10(日) 07:01:43.04ID:H3uBjuzu520デフォルトの名無しさん
2021/10/10(日) 09:28:13.64ID:lWUpu20f 意図しない破壊を防ぐにはキャプチャしなきゃいいだけ
それを参照のせいにするゴミはプログラマの資質がない
それを参照のせいにするゴミはプログラマの資質がない
521デフォルトの名無しさん
2021/10/10(日) 09:31:55.66ID:MbdCJRMe とりあえずで[&]で書いてるな
丁寧にやりたければ変数ごとに考えて明示する
丁寧にやりたければ変数ごとに考えて明示する
522デフォルトの名無しさん
2021/10/10(日) 09:34:15.67ID:lWUpu20f コピーのコストに無頓着なやつは11以後のC++に向かないな
523デフォルトの名無しさん
2021/10/10(日) 10:09:31.41ID:B/tc3JZb スレッド立ち上げるとかファイル書くとかクソ重い操作が伴う時にコピーコスト気にしてもしょうがない
場合によるとしか
場合によるとしか
524デフォルトの名無しさん
2021/10/10(日) 10:37:13.21ID:2ZvzU42q どこでも使う汎用性高いものなら問題が起きる前に[=]にしてる
逆に[&]はよほど安全だと思わない限り使わない
逆に[&]はよほど安全だと思わない限り使わない
525デフォルトの名無しさん
2021/10/10(日) 10:45:00.67ID:qGt3mQky526デフォルトの名無しさん
2021/10/10(日) 10:59:19.31ID:lWUpu20f527デフォルトの名無しさん
2021/10/10(日) 11:13:11.28ID:qGt3mQky ラムダ式は一般にラムダ式を定義したスコープの外に持ち出され、予見できないタイミングで使われうる
参照キャプチャだと
(1) ラムダ式が使われるタイミングで参照xの参照先が存在することが保証されていなければならない
(2) ラムダ式が使われるタイミングで参照xの参照先へのアクセスが他のスレッドと競合しないことが保証されていなければならない
とゆー2条件をクリアする必要がある。
コピーキャプチャだと(オブジェクトがディープコピーなら)どっちの配慮も不要
参照キャプチャして(1)、(2)を満たして安心できるのは、イミュータブルなオブジェクトだけ……!
参照キャプチャだと
(1) ラムダ式が使われるタイミングで参照xの参照先が存在することが保証されていなければならない
(2) ラムダ式が使われるタイミングで参照xの参照先へのアクセスが他のスレッドと競合しないことが保証されていなければならない
とゆー2条件をクリアする必要がある。
コピーキャプチャだと(オブジェクトがディープコピーなら)どっちの配慮も不要
参照キャプチャして(1)、(2)を満たして安心できるのは、イミュータブルなオブジェクトだけ……!
528デフォルトの名無しさん
2021/10/10(日) 11:14:48.07ID:qGt3mQky529デフォルトの名無しさん
2021/10/10(日) 11:18:00.19ID:B/tc3JZb >>527
ラムダ式をスコープ外に持ち出すなんてレアケースを「一般に」とか言われましても
ラムダ式をスコープ外に持ち出すなんてレアケースを「一般に」とか言われましても
530デフォルトの名無しさん
2021/10/10(日) 11:28:18.85ID:2ZvzU42q 遅延評価されるものはよくコンテナに入れて後でぶん回されるから・・・
531デフォルトの名無しさん
2021/10/10(日) 11:28:30.83ID:qGt3mQky532デフォルトの名無しさん
2021/10/10(日) 11:38:17.37ID:QniiN4Lz スコープ内の変数をキャプチャする処理をスレッドで動かす場合は普通にラムダ式を使うと思うが。
533デフォルトの名無しさん
2021/10/10(日) 11:39:34.18ID:B/tc3JZb >>531
はぁ?お前これしないの?ラムダ式のユースケースって9割方この類だろ
std::functionに突っ込んではるか遠くにぶん投げたりコンテナに詰め込んだりするのだけがラムダ式の使い道だと思ってるの?
std::sort(v.begin(), v.end(), [](int a, int b){/*...*/});
はぁ?お前これしないの?ラムダ式のユースケースって9割方この類だろ
std::functionに突っ込んではるか遠くにぶん投げたりコンテナに詰め込んだりするのだけがラムダ式の使い道だと思ってるの?
std::sort(v.begin(), v.end(), [](int a, int b){/*...*/});
534デフォルトの名無しさん
2021/10/10(日) 11:57:37.17ID:tv4afNG+ みなさんスレッドセーフにしたいときはスレッドセーフになる様に書きましょう
536デフォルトの名無しさん
2021/10/10(日) 12:21:43.80ID:Ld3aFVRt 任意のスレッド安全性を実現するのはゼロコストでは不可能だから
必ずシングルスレッドで実行される保障がある場合などはあえてスレッド安全性を捨てることもある
必ずシングルスレッドで実行される保障がある場合などはあえてスレッド安全性を捨てることもある
537デフォルトの名無しさん
2021/10/10(日) 12:31:34.49ID:6/7jGiIK std::conj() に double を渡したら std::complex<double> にキャストされるのが嫌なので、double を渡したら何もしないで double を返し、std::complex<double> を渡したら std::conj() と同じ動作をするオーバーロード関数 conj() を作ろうかと思うのですがアリですか?
なぜ std::conj() がそういう動作じゃないのか不思議で、何か見落としてたら教えてください
なぜ std::conj() がそういう動作じゃないのか不思議で、何か見落としてたら教えてください
538デフォルトの名無しさん
2021/10/10(日) 12:36:51.51ID:2ZvzU42q こここ・・こういうこと?
(A)キャプチャが必要でスコープ内で実行までされるケース
(B)キャプチャが必要でスコープ外まで実行が遅延されるケース
(B-1)ラムダ式生成時と実行スレッドが同じケース
(B-2)ラムダ式生成時と実行スレッドが違うケース
(A)なら全員「[&]で問題があるケースはない」と考えている
(B-1)は好みが別れているところ
(B-2)は好みが別れているところで、さらにキャプチャされる変数側をスレッドセーフにするかどうも好み
[&]と[=]がよく分からない人はコチラ
https://ideone.com/OQS113
以下個人的意見
スレッドセーフにするコストは結構高い(開発・実行・保守全てで)ので、競合させずに遅延可能ならそれに越したことはないと考えている
ようはコピーするコストをそれほど高くは見積もっていない
(A)キャプチャが必要でスコープ内で実行までされるケース
(B)キャプチャが必要でスコープ外まで実行が遅延されるケース
(B-1)ラムダ式生成時と実行スレッドが同じケース
(B-2)ラムダ式生成時と実行スレッドが違うケース
(A)なら全員「[&]で問題があるケースはない」と考えている
(B-1)は好みが別れているところ
(B-2)は好みが別れているところで、さらにキャプチャされる変数側をスレッドセーフにするかどうも好み
[&]と[=]がよく分からない人はコチラ
https://ideone.com/OQS113
以下個人的意見
スレッドセーフにするコストは結構高い(開発・実行・保守全てで)ので、競合させずに遅延可能ならそれに越したことはないと考えている
ようはコピーするコストをそれほど高くは見積もっていない
539デフォルトの名無しさん
2021/10/10(日) 14:46:42.08ID:lWUpu20f >>528
日本語でおk
日本語でおk
540デフォルトの名無しさん
2021/10/10(日) 16:03:29.39ID:lWUpu20f >>538
おまえさんの論法では同時並行はすべて別プロセスにすべきってことだな
おまえさんの論法では同時並行はすべて別プロセスにすべきってことだな
541デフォルトの名無しさん
2021/10/10(日) 16:49:17.57ID:2ZvzU42q >>540
う〜ん、伝わらないですね・・・
共有リソースに競合するアクセスがなければ排他制御の必要がなく、スレッドセーフにする必要がないってことです
そもそもコピーして共有しないことで排他制御が必要なくなれば、スレッドセーフにしなくていいという考え方ですよ
う〜ん、伝わらないですね・・・
共有リソースに競合するアクセスがなければ排他制御の必要がなく、スレッドセーフにする必要がないってことです
そもそもコピーして共有しないことで排他制御が必要なくなれば、スレッドセーフにしなくていいという考え方ですよ
542デフォルトの名無しさん
2021/10/10(日) 16:51:53.70ID:lWUpu20f だから共有=リスクなんだろ?
もうマシンも別の実機にすれば最強防御じゃん
もうマシンも別の実機にすれば最強防御じゃん
543デフォルトの名無しさん
2021/10/10(日) 17:01:53.15ID:2ZvzU42q >>542
残念ですが理解してもらうことは諦めます
残念ですが理解してもらうことは諦めます
544デフォルトの名無しさん
2021/10/10(日) 17:32:07.51ID:qGt3mQky >>533
頭の中がgdgdな人が話をgdgdにしようとしていまつね……
std::sort()の呼び出しと同じスコープが終わった後に
[](int a, int b)が呼び出されないということは、単にstd::sort()がreturnするまでにラムダ式を忘れてくれる作りだから(たまたま)担保されているだけであって、
[](int a, int b)のスコープが限定されるために担保されているわけではないし、
[](int a, int b)がラムダ式だから担保されているわけでもないの。
つまり、>>533は
>ラムダ式をスコープ外に持ち出すなんてレアケース(>>529)
の根拠に全くなっていないワケ
頭の中がgdgdな人が話をgdgdにしようとしていまつね……
std::sort()の呼び出しと同じスコープが終わった後に
[](int a, int b)が呼び出されないということは、単にstd::sort()がreturnするまでにラムダ式を忘れてくれる作りだから(たまたま)担保されているだけであって、
[](int a, int b)のスコープが限定されるために担保されているわけではないし、
[](int a, int b)がラムダ式だから担保されているわけでもないの。
つまり、>>533は
>ラムダ式をスコープ外に持ち出すなんてレアケース(>>529)
の根拠に全くなっていないワケ
545はちみつ餃子 ◆8X2XSCHEME
2021/10/10(日) 17:47:25.28ID:cCUvKLuJ レアケースがどうこういったところでレアケースなら考えなくていいってわけでもない。
そんなの個別の事例ごとに考えるしかしょうがないだろう。
そんなの個別の事例ごとに考えるしかしょうがないだろう。
546デフォルトの名無しさん
2021/10/10(日) 17:56:25.23ID:lWUpu20f >>543
無理筋の主張ってことがわかってもらえたならいいよ
無理筋の主張ってことがわかってもらえたならいいよ
547デフォルトの名無しさん
2021/10/10(日) 18:04:09.07ID:2ZvzU42q >>546
無理筋ではありませんよ
スレッド以前から並列処理で共有される実行コンテキストを分けることは大昔からやられてきました
今更その手法自体を想像できない人に、こんなところで説明するのは困難なだけです
無理筋ではありませんよ
スレッド以前から並列処理で共有される実行コンテキストを分けることは大昔からやられてきました
今更その手法自体を想像できない人に、こんなところで説明するのは困難なだけです
548デフォルトの名無しさん
2021/10/10(日) 18:11:49.41ID:lWUpu20f おまえさんの言う「大昔」がどのくらいか知らんが
俺が若手の頃はRENT,REUSなんてやってたよ
俺が若手の頃はRENT,REUSなんてやってたよ
549デフォルトの名無しさん
2021/10/10(日) 18:25:30.38ID:Euz3vWgQ ラムダ式によって作られたオブジェクトがキャプチャされたオブジェクトより長生きする可能性があるならコピーキャプチャ
そうでなくともレジスタに乗ると思われるならコピーキャプチャ
そうでない場合に初めて参照キャプチャ
排他に関してはshared_ptr<mutex>とshared_ptr<なかみ>をメンバに持たせてコピー可能にしつつ、メンバ関数経由で排他制御するのが筋だと思う
RustのArc<Mutex<T>>パターンに影響されすぎかもしれないが……
いずれにせよキャプチャと排他制御の問題とは切り離して考えることができるし、そうすべき
そうでなくともレジスタに乗ると思われるならコピーキャプチャ
そうでない場合に初めて参照キャプチャ
排他に関してはshared_ptr<mutex>とshared_ptr<なかみ>をメンバに持たせてコピー可能にしつつ、メンバ関数経由で排他制御するのが筋だと思う
RustのArc<Mutex<T>>パターンに影響されすぎかもしれないが……
いずれにせよキャプチャと排他制御の問題とは切り離して考えることができるし、そうすべき
550デフォルトの名無しさん
2021/10/10(日) 21:19:12.50ID:MbdCJRMe ラムダ式関連でいうと参照とかコピーをデフォルトだけで指定したときも実際に使ったものの分しかクロージャオブジェクトのサイズに乗ってこないと思ってるんだけどヤバい?
551デフォルトの名無しさん
2021/10/10(日) 23:42:34.57ID:9PtWfEC6552デフォルトの名無しさん
2021/10/10(日) 23:58:18.57ID:2ZvzU42q553デフォルトの名無しさん
2021/10/11(月) 02:51:41.68ID:1CVjhT+M >>551
cppref見たらクロージャオブジェクトのサイズは未規定とあって気になった
cppref見たらクロージャオブジェクトのサイズは未規定とあって気になった
554デフォルトの名無しさん
2021/10/11(月) 05:43:06.87ID:FIUH1xZN555デフォルトの名無しさん
2021/10/11(月) 07:43:50.36ID:M/9mFHzI >>554
説明するべきでないのが残念ですが、その頃からあなたが分かってなかっただけですよ
説明するべきでないのが残念ですが、その頃からあなたが分かってなかっただけですよ
556デフォルトの名無しさん
2021/10/11(月) 07:52:27.26ID:pMbZgi1h557デフォルトの名無しさん
2021/10/11(月) 08:08:27.81ID:M/9mFHzI558デフォルトの名無しさん
2021/10/11(月) 08:46:34.77ID:pMbZgi1h と言うことにしたいのですね
559デフォルトの名無しさん
2021/10/11(月) 09:17:45.21ID:G+wdAsto リエントラント目指してもいいじゃないの
560デフォルトの名無しさん
2021/10/11(月) 09:58:01.98ID:F+cmXQty クラスの型を自動変換して関数に入れるにはどうすればいいですか?例えば、
class A {
public:
double hoge;
};
class B {
public:
int hogehoge;
};
int function(A aaa);
があった時に、functionにB型を入れても動くようにしたいです。
クラスAのソースに、Bから生成するコンストラクタ書ければいいのかもしれませんが、
実際はAはライブラリのクラスで触れなくて、Bが自作のクラスになります。
class A {
public:
double hoge;
};
class B {
public:
int hogehoge;
};
int function(A aaa);
があった時に、functionにB型を入れても動くようにしたいです。
クラスAのソースに、Bから生成するコンストラクタ書ければいいのかもしれませんが、
実際はAはライブラリのクラスで触れなくて、Bが自作のクラスになります。
561デフォルトの名無しさん
2021/10/11(月) 10:22:18.86ID:T3qmZxdk >>560
Bを受け付けるfunctionを書くんや
Bを受け付けるfunctionを書くんや
562デフォルトの名無しさん
2021/10/11(月) 10:50:11.05ID:QW1mycSW B extends A
としたら
function
の引数をキャスト?で動かない?
としたら
function
の引数をキャスト?で動かない?
563デフォルトの名無しさん
2021/10/11(月) 10:54:01.94ID:RUUSz/4T 簡単や
template<class A>
int function(A aaa);
template<class A>
int function(A aaa);
564デフォルトの名無しさん
2021/10/11(月) 12:11:05.48ID:F+cmXQty できました。ありがとうございます。
また、ポインタのvectorを実体として使うにはどうすればよいでしょうか?
std::vector<A*>
で定義されてるものを、
std::vector<A>として使いたいです。
別のvectorにポインタ値を詰め直せばいけると思うのですが、元のポインタの場所のまま実体で使いたいです。無理でしょうか。
また、ポインタのvectorを実体として使うにはどうすればよいでしょうか?
std::vector<A*>
で定義されてるものを、
std::vector<A>として使いたいです。
別のvectorにポインタ値を詰め直せばいけると思うのですが、元のポインタの場所のまま実体で使いたいです。無理でしょうか。
565デフォルトの名無しさん
2021/10/11(月) 12:31:51.97ID:T3qmZxdk 参照を使うんや
566デフォルトの名無しさん
2021/10/11(月) 13:03:47.84ID:NaSXzxBw 参照のvectorなんて作れたっけ?
567デフォルトの名無しさん
2021/10/11(月) 13:16:00.26ID:T3qmZxdk reference_wrapper使うんや
まあ下らんこと考えんほうがええ
まあ下らんこと考えんほうがええ
568デフォルトの名無しさん
2021/10/11(月) 17:28:01.69ID:0Mn4AOx6 >>564
ややこしい所有権・所有責任問題が発生するから、ソースコードを見直したほうがいい。
具体的にはstd::vector<*A>を
std::vector<std::shared_ptr<A>>
にして、shared_ptr<A>をやり取りするようにすべきだな。
性能問題とか互換問題とかでも無ければvector<*A>なんて使うもんじゃない。
ややこしい所有権・所有責任問題が発生するから、ソースコードを見直したほうがいい。
具体的にはstd::vector<*A>を
std::vector<std::shared_ptr<A>>
にして、shared_ptr<A>をやり取りするようにすべきだな。
性能問題とか互換問題とかでも無ければvector<*A>なんて使うもんじゃない。
569デフォルトの名無しさん
2021/10/11(月) 20:43:04.76ID:bPHZE8G4 言ってることは同意だが、ポインタの型もまともに書けないような人に言われても説得力がない
570デフォルトの名無しさん
2021/10/11(月) 20:47:36.58ID:c9XBGwkD Rustと間違えたんじゃね
571デフォルトの名無しさん
2021/10/11(月) 22:25:40.15ID:RUUSz/4T 簡単や
std::vector<std::shared_ptr<A>>
std::vector<std::shared_ptr<A>>
572デフォルトの名無しさん
2021/10/11(月) 23:13:38.91ID:9gfKW03X ドラクエ3のバージョン違いの謎に迫る!
https://www.youtube.com/watch?v=sh5GXYs6T1c
2021/10/01に公開済み
FC版DQ3には、AバージョンとBバージョンが存在する
今回はROM内のプログラムを徹底比較!
どこが違うのか白黒ハッキリさせると息巻いた内藤プロ
当時自分が作ったのに全て忘れてて大変なことに・・
https://www.youtube.com/watch?v=sh5GXYs6T1c
2021/10/01に公開済み
FC版DQ3には、AバージョンとBバージョンが存在する
今回はROM内のプログラムを徹底比較!
どこが違うのか白黒ハッキリさせると息巻いた内藤プロ
当時自分が作ったのに全て忘れてて大変なことに・・
573デフォルトの名無しさん
2021/10/12(火) 04:13:48.50ID:jMkI4z1q ぶっちゃけ継承とかポリモフィズムはオワコンでテンプレート最強?
574はちみつ餃子 ◆8X2XSCHEME
2021/10/12(火) 04:25:26.30ID:WB1ScBpO >>573
過去の C++ の流行においては継承が強調されすぎたこともあって
継承の害悪な面も見えて大幅な揺り戻しは有った。
しかしそれぞれに役割があるのでどれかが廃れるとかいう話ではない。
バランスとしては継承が控えめになったけれど、だからといって継承のない C++ はありえない。
結局のところそれぞれを適切に使えというだけのこと。
過去の C++ の流行においては継承が強調されすぎたこともあって
継承の害悪な面も見えて大幅な揺り戻しは有った。
しかしそれぞれに役割があるのでどれかが廃れるとかいう話ではない。
バランスとしては継承が控えめになったけれど、だからといって継承のない C++ はありえない。
結局のところそれぞれを適切に使えというだけのこと。
575デフォルトの名無しさん
2021/10/12(火) 06:45:14.85ID:LoAbYEbi 継承が有効に使われている事例をひとつも知らないヒヨっ子丸出しな質問だな
テンプレートの何がいいのかもわかってなさそう
テンプレートの何がいいのかもわかってなさそう
576デフォルトの名無しさん
2021/10/12(火) 07:03:36.18ID:bL2VfUhD CRTPとか見たら脳を壊しそう
577デフォルトの名無しさん
2021/10/12(火) 07:24:36.11ID:+oJUuDWk578デフォルトの名無しさん
2021/10/12(火) 08:16:42.08ID:4AIb2U7h >>573
メソッド共通化を実現するための継承はオワコン。
プレースホルダーを用意するための継承は現役。
総称型が実装されれば継承自体をオワコンにできそうな気がするけど、総称型風スマートポインタて無かったっけ?
メソッド共通化を実現するための継承はオワコン。
プレースホルダーを用意するための継承は現役。
総称型が実装されれば継承自体をオワコンにできそうな気がするけど、総称型風スマートポインタて無かったっけ?
579デフォルトの名無しさん
2021/10/12(火) 08:20:36.96ID:vDVhyOYS 耳が腐る
580デフォルトの名無しさん
2021/10/12(火) 09:51:23.11ID:kjIGaWla 何でこんな荒れてんの?
581デフォルトの名無しさん
2021/10/12(火) 10:09:23.54ID:qN1bonoC いつものこと
582デフォルトの名無しさん
2021/10/12(火) 10:40:17.54ID:kjIGaWla 単発荒らしか
583デフォルトの名無しさん
2021/10/13(水) 04:27:45.44ID:yxtzEQdj void * の生ポが最強
584デフォルトの名無しさん
2021/10/13(水) 07:29:48.53ID:w2mbz/VV ○○なんていらねーよ害悪だけだ
まだ使ってるやつは全員バカ
これからは△△を使うべきだ
なーんて言っちゃってマウント取った気になってるおめでたいやつ
メガトン級にアホにされてることに気付かねえよな
まだ使ってるやつは全員バカ
これからは△△を使うべきだ
なーんて言っちゃってマウント取った気になってるおめでたいやつ
メガトン級にアホにされてることに気付かねえよな
585デフォルトの名無しさん
2021/10/13(水) 09:41:39.46ID:V99uCirA vector を shuffle する場合について質問です(gcc/windows10でテスト)
vector<int> vec(50, 0);
for(int i = 0; i < 10; ++i) vec[i] = 1;
random_device dev_seed;
mt19937_64 mt(dev_seed());
shuffle(vec.begin(), vec.end(), mt);
で確かに shuffle されているのですが疑問点がいくつかあります
1.dev_seed()が毎回同じ値を返してる?
(random_deviceの使い方を間違えてる?)
2.先頭の値が1に偏ってる?
(shuffle() を数回繰り返す解決方法もあるようですがあまり気持ち良くないです)
3.そもそもforで先頭の方に1を入れる発想が良くない?
(shuffleされてるならこれは関係無いと思いたい)
vector<int> vec(50, 0);
for(int i = 0; i < 10; ++i) vec[i] = 1;
random_device dev_seed;
mt19937_64 mt(dev_seed());
shuffle(vec.begin(), vec.end(), mt);
で確かに shuffle されているのですが疑問点がいくつかあります
1.dev_seed()が毎回同じ値を返してる?
(random_deviceの使い方を間違えてる?)
2.先頭の値が1に偏ってる?
(shuffle() を数回繰り返す解決方法もあるようですがあまり気持ち良くないです)
3.そもそもforで先頭の方に1を入れる発想が良くない?
(shuffleされてるならこれは関係無いと思いたい)
586デフォルトの名無しさん
2021/10/13(水) 09:47:25.08ID:V99uCirA ああこれか
https://cpprefjp.github.io/reference/random/random_device.html
>GCC (MinGW): GCC 9.1までは擬似乱数生成器 mt19937 を用いるため使用を推奨しない。詳細は備考欄を参照。GCC 9.2からは暗号論的な乱数である rand_s を使用する。
https://cpprefjp.github.io/reference/random/random_device.html
>GCC (MinGW): GCC 9.1までは擬似乱数生成器 mt19937 を用いるため使用を推奨しない。詳細は備考欄を参照。GCC 9.2からは暗号論的な乱数である rand_s を使用する。
587デフォルトの名無しさん
2021/10/13(水) 10:51:16.02ID:ocY7/s3a 偏りを判断する目が偏ってるのでは
588デフォルトの名無しさん
2021/10/13(水) 12:39:29.13ID:L2HfUVD6 random_deviceがダメな環境でrdtsc命令使ったことあるな
良いやり方かは知らん
良いやり方かは知らん
589デフォルトの名無しさん
2021/10/13(水) 16:09:05.50ID:SuRXriSW590はちみつ餃子 ◆8X2XSCHEME
2021/10/13(水) 16:23:55.69ID:6cp7j/AO >>589
前者は編集者による解説なども含んでいて仕様の意図や習慣がわかりやすい。 実装の現実みたいな補足もあるし。
後者は仕様書の再編を指向してるから正確だけど規則の羅列を読むのがしんどいこともある。
適宜使い分けて。
前者は編集者による解説なども含んでいて仕様の意図や習慣がわかりやすい。 実装の現実みたいな補足もあるし。
後者は仕様書の再編を指向してるから正確だけど規則の羅列を読むのがしんどいこともある。
適宜使い分けて。
591デフォルトの名無しさん
2021/10/13(水) 16:49:55.63ID:SuRXriSW >>590
ありがとう
ありがとう
592デフォルトの名無しさん
2021/10/14(木) 00:25:54.44ID:unU20Liw 逆にjaはほぼ見ないな
cpprefjpかen
cpprefjpかen
593デフォルトの名無しさん
2021/10/14(木) 17:38:44.33ID:0xmYH4RJ みんなで広げよう友達の輪
https://github.com/cpprefjp/cpprefjp.github.io
https://github.com/cpprefjp/cpprefjp.github.io
594デフォルトの名無しさん
2021/10/14(木) 19:08:30.88ID:D5VUtH01 今までJavaでやってきたけどC++もやってみたいんだよね
すぐ出来るようになると思う?
すぐ出来るようになると思う?
595デフォルトの名無しさん
2021/10/14(木) 19:10:28.43ID:u3valL3D596デフォルトの名無しさん
2021/10/14(木) 19:12:47.65ID:pMO89bX6 >>594
c++でちょっとした文字列パースして内容に応じたオブジェクト構築する処理書いてたの、
ほぼ使ったことないJavaに移植したらスゲー早く出来てワロタ。C#もサクサクできたな〜
逆は色々イラッとするんじゃねぇかな?
c++でちょっとした文字列パースして内容に応じたオブジェクト構築する処理書いてたの、
ほぼ使ったことないJavaに移植したらスゲー早く出来てワロタ。C#もサクサクできたな〜
逆は色々イラッとするんじゃねぇかな?
597デフォルトの名無しさん
2021/10/15(金) 01:29:52.42ID:oSpeFu2A 元々C++はその辺の文字列処理を毎回1からゴリゴリ書くような言語じゃなくて何らかのライブラリを利用するものだと思うけど、
クロスプラットフォームで各種文字コードが自由に扱えて、c++11以降の仕様に対応してて、かつかゆいところに手の届くライブラリって意外とないんだよね
いや、俺が知らないだけかもしらんけどw
クロスプラットフォームで各種文字コードが自由に扱えて、c++11以降の仕様に対応してて、かつかゆいところに手の届くライブラリって意外とないんだよね
いや、俺が知らないだけかもしらんけどw
598デフォルトの名無しさん
2021/10/15(金) 05:56:29.15ID:JZ8LRo6T 実質的な標準と呼べるものは今もないよ
599デフォルトの名無しさん
2021/10/15(金) 09:26:39.59ID:c8xS1fS2600デフォルトの名無しさん
2021/10/15(金) 10:21:28.25ID:Sjupi756 Javaから入ると不能(陰ポ)になる
もう手遅れ
もう手遅れ
601デフォルトの名無しさん
2021/10/15(金) 10:22:26.59ID:Sjupi756 >>597
wxWidgets
wxWidgets
602デフォルトの名無しさん
2021/10/15(金) 10:26:50.27ID:Eg3Mb3n8 あれ出来上がるバイナリ重すぎなんだけど、今は違ったりするのかね
603デフォルトの名無しさん
2021/10/15(金) 11:49:16.16ID:Sjupi756 Debugだとバカデカくなるけど
Releaseは気にならないレベル
(DLL除く)
Releaseは気にならないレベル
(DLL除く)
604デフォルトの名無しさん
2021/10/15(金) 11:53:45.11ID:JZ8LRo6T std::regexと等価なインターフェースを各々の正規表現ベンダーが用意してくれればいいんだが、それすら実現されていないお寒い状況
605デフォルトの名無しさん
2021/10/15(金) 12:03:59.88ID:XHojpqKh >>599
その辺も無いわけじゃないんだけど、クラスの構造どうしようかとか、メモリ管理どうするかとか、
変態trmplateでパズルしてみようかとか、選択肢多い分考えることも多い部分で時間かけることが
多い所はあるなーって。それがC++使いたい動機の裏返しでもあるんだけど。
あと本人の問題120%だが、ボケて油断してると、エラー直すのにやたら時間かかったりで。
Javaとか詳しく知らん状態だから言えるのかもしれんけど、もうこうするしかネェってレールが
最初からあるような印象でした。つかオラクルのライセンス問題のほうがムズいw
その辺も無いわけじゃないんだけど、クラスの構造どうしようかとか、メモリ管理どうするかとか、
変態trmplateでパズルしてみようかとか、選択肢多い分考えることも多い部分で時間かけることが
多い所はあるなーって。それがC++使いたい動機の裏返しでもあるんだけど。
あと本人の問題120%だが、ボケて油断してると、エラー直すのにやたら時間かかったりで。
Javaとか詳しく知らん状態だから言えるのかもしれんけど、もうこうするしかネェってレールが
最初からあるような印象でした。つかオラクルのライセンス問題のほうがムズいw
606デフォルトの名無しさん
2021/10/15(金) 12:19:11.94ID:Q47teFml 等価って図々しいだろ
607デフォルトの名無しさん
2021/10/15(金) 12:34:03.36ID:Ax3dDCZ3 std::regexみたいな文字コードというものがあることを知らない人間が作ってそうなものを標準だと思ってつかうのはやめたほうがいいと思います
608デフォルトの名無しさん
2021/10/15(金) 12:53:35.21ID:JZ8LRo6T char8_tが導入されたんだからutf-8しばりでいいじゃない
609デフォルトの名無しさん
2021/10/15(金) 13:14:36.67ID:x+xcCYcO なんか最近曖昧な上に突っ込む点多すぎる内容的にはどうでもいい話題が多くない?
610デフォルトの名無しさん
2021/10/15(金) 13:33:42.62ID:ma4A3Lrr611ハノン ◆QZaw55cn4c
2021/10/15(金) 19:29:27.64ID:0K4QrynR >>608
内部コードは utf-32 でやっているので、utf-32 縛りのほうがうれしいです‥
内部コードは utf-32 でやっているので、utf-32 縛りのほうがうれしいです‥
612デフォルトの名無しさん
2021/10/15(金) 19:56:39.74ID:JZ8LRo6T >>611
はぁ?
std:::basic_regex<char8_t>、std::basic_:regex<char16_t>, std:::basic_regex<char32_t> のどれでも好きなの使えばいいじゃん
はぁ?
std:::basic_regex<char8_t>、std::basic_:regex<char16_t>, std:::basic_regex<char32_t> のどれでも好きなの使えばいいじゃん
613デフォルトの名無しさん
2021/10/15(金) 20:01:47.12ID:JZ8LRo6T ところで、char16_t、char32_tってエンディアンはシステム依存しばり?
614デフォルトの名無しさん
2021/10/15(金) 20:03:20.51ID:eqKsqNtm ちなみに、いま使えるみたいですよ。
むかしは使えることになってるのに実際は使えなかったんだけど。
自作イテレーターにも対応してるようです。
アップルは知らんけど。
Ubuntu+gcc、Windows10+clでは自作イテレータでstd::regex<>が使えました。
これは、HTML、XML、JSONのデータ構造からコンテンツ内のみを検索のような事に使えます。
標準から外れるような議論もあるそうですが、便利なので外れないように抗議していきましょう。
むかしは使えることになってるのに実際は使えなかったんだけど。
自作イテレーターにも対応してるようです。
アップルは知らんけど。
Ubuntu+gcc、Windows10+clでは自作イテレータでstd::regex<>が使えました。
これは、HTML、XML、JSONのデータ構造からコンテンツ内のみを検索のような事に使えます。
標準から外れるような議論もあるそうですが、便利なので外れないように抗議していきましょう。
615デフォルトの名無しさん
2021/10/15(金) 20:12:21.03ID:eqKsqNtm C++20でchar8_tが入ると便利になりますよね。
616デフォルトの名無しさん
2021/10/15(金) 20:12:58.12ID:Q47teFml617デフォルトの名無しさん
2021/10/15(金) 20:35:46.40ID:eqKsqNtm STLはセントルイスの略。
では、GCCは何処でしょう?
では、GCCは何処でしょう?
618デフォルトの名無しさん
2021/10/15(金) 20:50:28.66ID:R98eOYn2 つまんね
619デフォルトの名無しさん
2021/10/15(金) 21:40:43.65ID:HBylJ5Wv 平面3リンクマニュピュレータの逆運動学のプログラミングが分かりません。
キーボードで手先の位置を入力すると、関節角が表示されるようにしたいです。
scanfを使うのと、アームの長さなどは適当に決めていいという条件です。
わかる方いたら、送って欲しいです。
キーボードで手先の位置を入力すると、関節角が表示されるようにしたいです。
scanfを使うのと、アームの長さなどは適当に決めていいという条件です。
わかる方いたら、送って欲しいです。
620デフォルトの名無しさん
2021/10/15(金) 22:21:16.57ID:fUsvamq4 >>619
どこの大学のなんていう授業か教えてくれたら送ってあげる
どこの大学のなんていう授業か教えてくれたら送ってあげる
621デフォルトの名無しさん
2021/10/15(金) 22:41:19.44ID:HBylJ5Wv 大した大学ではないです。ロボット工学です。
622デフォルトの名無しさん
2021/10/16(土) 10:16:02.78ID:pBeCkfuy >>619
冗長マニピュレータで一意に求まらん。制約条件設けてるはずだが。
冗長マニピュレータで一意に求まらん。制約条件設けてるはずだが。
623デフォルトの名無しさん
2021/10/16(土) 11:55:15.40ID:NekA8urB >>622
リンクの長さは良さそうな値を定義してください。関節の座標はこちらで決めずにあくまでも手先の位置・姿勢であるxed、yed、φedから計算で出します。解が複数出てくるので、全ての候補を求めてください。
例えば、リンクの長さは根元から順に0.3m、0.3m、0.05mなどで良いです。
プログラムとしては手先の目標値を入力して、θ1、θ2、θ3が出力されればOKです。
リンクの長さは良さそうな値を定義してください。関節の座標はこちらで決めずにあくまでも手先の位置・姿勢であるxed、yed、φedから計算で出します。解が複数出てくるので、全ての候補を求めてください。
例えば、リンクの長さは根元から順に0.3m、0.3m、0.05mなどで良いです。
プログラムとしては手先の目標値を入力して、θ1、θ2、θ3が出力されればOKです。
624デフォルトの名無しさん
2021/10/16(土) 12:05:17.39ID:NekA8urB >>622
目標値は、x=0 y=0.3m φ=90degがいいと思います。先ほどのリンクの長さの設定値で楽な姿勢でロボットの手が届く範囲ですので。
目標値は、x=0 y=0.3m φ=90degがいいと思います。先ほどのリンクの長さの設定値で楽な姿勢でロボットの手が届く範囲ですので。
625デフォルトの名無しさん
2021/10/16(土) 12:08:52.99ID:pBeCkfuy626デフォルトの名無しさん
2021/10/16(土) 12:14:57.04ID:NekA8urB >>625
テキストに載ってないからここで質問してるんですよ。手の姿勢は例えばの話ですよ。どっちみちscanfで入力するんですから。
テキストに載ってないからここで質問してるんですよ。手の姿勢は例えばの話ですよ。どっちみちscanfで入力するんですから。
627デフォルトの名無しさん
2021/10/16(土) 12:22:50.77ID:pBeCkfuy628デフォルトの名無しさん
2021/10/16(土) 12:35:46.33ID:NekA8urB >>627
日本語分かる?プログラムは載ってないから。教科書に載ってるから見ろって丸投げしてんのどっちだよ。
日本語分かる?プログラムは載ってないから。教科書に載ってるから見ろって丸投げしてんのどっちだよ。
629デフォルトの名無しさん
2021/10/16(土) 13:20:33.97ID:N8k1BZc2 >>628
お前だよどう考えても
お前だよどう考えても
630デフォルトの名無しさん
2021/10/16(土) 13:59:18.07ID:Ilt9CI+j 答える価値がないと思うなら放置しろよ
くだらねえ煽りやってんな迷惑だ
くだらねえ煽りやってんな迷惑だ
631デフォルトの名無しさん
2021/10/16(土) 21:12:30.56ID:pBeCkfuy632デフォルトの名無しさん
2021/10/16(土) 21:15:24.70ID:1x8IpOH2 > どっちみちscanfで入力するんですから。
このレガシーさには誰も何も思わんの?笑
このレガシーさには誰も何も思わんの?笑
633デフォルトの名無しさん
2021/10/16(土) 21:21:35.71ID:gJanIysk ssfanf_s()を使った方が(%sとかについて)ちょっと安全
634デフォルトの名無しさん
2021/10/16(土) 21:31:10.24ID:ex7yhveJ 安全性の話じゃねえだろ
635デフォルトの名無しさん
2021/10/16(土) 21:53:50.46ID:EatL4YvD わざわざC++なんか使っときながら勉強不足でモロアンチパターン踏んでるバカ
よくいるよね
よくいるよね
636デフォルトの名無しさん
2021/10/16(土) 22:09:18.72ID:n5lzAHDj どういうの?
637デフォルトの名無しさん
2021/10/16(土) 23:14:18.41ID:gJanIysk やっぱ普通fgets()して1行全体を読み込んでからstrtok_s()使いマスヨネー
638デフォルトの名無しさん
2021/10/16(土) 23:16:29.16ID:gJanIysk 文字列の数値化はstrtol()、strtoul()、strtof()、strtod()をオーバーロードしたwrapper関数を呼ぶテンプレートにすれば
cinと同等の型安全性と同等以上の使い勝手が実現にできるし、
cinと同等の型安全性と同等以上の使い勝手が実現にできるし、
639デフォルトの名無しさん
2021/10/16(土) 23:41:33.15ID:VgkITY1O C++な人ってゴリゴリ自分でBNF的なparser combinator書くイメージだな
わざわざcstring使う人はいない気がする
わざわざcstring使う人はいない気がする
640デフォルトの名無しさん
2021/10/16(土) 23:45:41.19ID:gJanIysk いろんな人の手を経たプロジェクトだと CString(Windows) と std::string
(ていうか正確にはstd::basic_string<TCHAR>)が混在しがちなのがほんのちょっと悩みどころ
(ていうか正確にはstd::basic_string<TCHAR>)が混在しがちなのがほんのちょっと悩みどころ
641デフォルトの名無しさん
2021/10/16(土) 23:46:44.02ID:VgkITY1O えーっと・・・cstringはC言語のstring.hのことだよ
642デフォルトの名無しさん
2021/10/16(土) 23:53:12.21ID:gJanIysk しらそん
いちいち
#ifdef __clusplus
# include <cstring>
# include <cmath>
#else
# include <string.h>
# include <math.h>
#endif
みたいな書き方するん会、
いちいち
#ifdef __clusplus
# include <cstring>
# include <cmath>
#else
# include <string.h>
# include <math.h>
#endif
みたいな書き方するん会、
643デフォルトの名無しさん
2021/10/16(土) 23:54:09.02ID:6ga3nra2 json文字列として入力データを受け取って既存のjsonライブラリでパースするのが無難じゃないですかね
644デフォルトの名無しさん
2021/10/17(日) 09:22:32.00ID:4Zt4uwKf C++でfgets使うアホの世界チャンピオンがいるな
645デフォルトの名無しさん
2021/10/17(日) 09:40:16.91ID:Rn6uB4uI 壊れても居ないものを直そうとするヴァカに言われたくはないし、
行の長さが定まっていないみたいなアフォな外部データ設計でない限り
fgets()で軽くて十分
行の長さが定まっていないみたいなアフォな外部データ設計でない限り
fgets()で軽くて十分
646デフォルトの名無しさん
2021/10/17(日) 09:48:08.24ID:4Zt4uwKf 直すって何を?
ああ、おまえさんの頭か
ああ、おまえさんの頭か
647デフォルトの名無しさん
2021/10/17(日) 11:05:04.47ID:cds0CTiX 今ならメモリ不足とか気にする必要はほぼないから、
fgets()よりも、テキストファイル全体を一気に読み込んで1行分をstring_viewで返していく、みたいな流れの処理の方が効率は良いはずだよね
fgets()よりも、テキストファイル全体を一気に読み込んで1行分をstring_viewで返していく、みたいな流れの処理の方が効率は良いはずだよね
648デフォルトの名無しさん
2021/10/17(日) 11:06:37.70ID:XrR+wpGu MSVCのfgetc()とfgets()は実行速度が遅い
649デフォルトの名無しさん
2021/10/17(日) 11:19:23.83ID:Rn6uB4uI650デフォルトの名無しさん
2021/10/17(日) 11:23:35.72ID:XyIQiUpb どれもこれもザックリすぎて話にならない
651デフォルトの名無しさん
2021/10/17(日) 11:24:11.36ID:Rn6uB4uI こと外部データに関しては、読み込み終えないとサイズがわからない、みたいな仕様は悪手
で、異常な入力に対してエラー出力するプログラムは正しいが
クラッシュするのはバグ
という観点からすると、動的メモリ確保による不定長読み込みができると言っても活かしようが無く、
結局fgets()でいいやん?となる
で、異常な入力に対してエラー出力するプログラムは正しいが
クラッシュするのはバグ
という観点からすると、動的メモリ確保による不定長読み込みができると言っても活かしようが無く、
結局fgets()でいいやん?となる
652デフォルトの名無しさん
2021/10/17(日) 11:27:15.30ID:XyIQiUpb fgets使うくらいならOS固有の関数を呼ぶべきだと思う
readとかReadFileのことね
readとかReadFileのことね
653デフォルトの名無しさん
2021/10/17(日) 11:30:16.75ID:Rn6uB4uI654デフォルトの名無しさん
2021/10/17(日) 11:30:46.37ID:0m7FLjXf >>652
ええ…
ええ…
655デフォルトの名無しさん
2021/10/17(日) 11:47:07.94ID:XrR+wpGu 真理情報:fgets()はUTF-16やUTF-32のテキストファイルを正しく読み込めない
656デフォルトの名無しさん
2021/10/17(日) 12:13:01.70ID:0m7FLjXf ワイド文字用の関数は使っちゃだめということ?
まあ使い方よくわからんけど
まあ使い方よくわからんけど
657デフォルトの名無しさん
2021/10/17(日) 12:16:45.02ID:XrR+wpGu HTMLなりXMLなりJSONなりそれぞれパーサーがすでにあるのだからその恩恵を享受するのがナウなヤングの取るべき道でしょ
658デフォルトの名無しさん
2021/10/17(日) 12:21:07.90ID:4Zt4uwKf659デフォルトの名無しさん
2021/10/17(日) 12:21:44.62ID:cds0CTiX >>656
ワイド文字は環境によってUTF16だったりUTF32だったりで仕様が定まらないので使いにくい
ワイド文字は環境によってUTF16だったりUTF32だったりで仕様が定まらないので使いにくい
660デフォルトの名無しさん
2021/10/17(日) 12:22:29.87ID:XyIQiUpb >>658のような勝手にmmap使っちゃうようなのがいるとバグだらけになるよ
661デフォルトの名無しさん
2021/10/17(日) 12:24:50.71ID:XrR+wpGu Java、Python、Ruby、Javscriptなどの他言語にファイル読込み処理を移植する徒労を考えないバカが集うスレはここですね
662デフォルトの名無しさん
2021/10/17(日) 12:25:21.31ID:jNwhUFcS >>ID:NekA8urB の丸投げ君、己の課題であることを伏せて、お題スレに出題!
663デフォルトの名無しさん
2021/10/17(日) 12:27:57.21ID:MD8jEcOV ここまでifstreamの話なし
664デフォルトの名無しさん
2021/10/17(日) 12:28:53.83ID:PatMwtBc 組み込みに近いところいると、大抵自炊に近い状態になるわ。
たとえばiostreamコンパイル通るやん、ってリンカがフラッシュ容量超えを宣告しやがる(フラッシュが640KiBもある豪華マイコンやで)。
上の方でrandom_deviceカスタマイズするの簡単にでけんやん、とか。ハード乱数なんて別にクラスに押し込んでも意味薄だけど。
たとえばiostreamコンパイル通るやん、ってリンカがフラッシュ容量超えを宣告しやがる(フラッシュが640KiBもある豪華マイコンやで)。
上の方でrandom_deviceカスタマイズするの簡単にでけんやん、とか。ハード乱数なんて別にクラスに押し込んでも意味薄だけど。
665デフォルトの名無しさん
2021/10/17(日) 12:29:39.45ID:4Zt4uwKf666デフォルトの名無しさん
2021/10/17(日) 12:29:57.14ID:XyIQiUpb C++の標準ライブラリを使用しない前提でファイル読み込みを考えるならOS固有の関数を呼ぶべきって言ってるだけだよ
C++の標準ライブラリを使用しないでCの標準ライブラリ呼ぶには何か正当な理由がいると思う
C++の標準ライブラリを使用しないでCの標準ライブラリ呼ぶには何か正当な理由がいると思う
667デフォルトの名無しさん
2021/10/17(日) 12:35:21.04ID:QqhGhKAl 標準ライブラリのストリームは遅延評価やらなんやら余計な思惑が付いてるのでとにかく重い。
668デフォルトの名無しさん
2021/10/17(日) 12:36:36.60ID:Bq9qBgnd >>666
<cstdio>はC++標準ライブラリの一部だよ
<cstdio>はC++標準ライブラリの一部だよ
669デフォルトの名無しさん
2021/10/17(日) 12:36:58.22ID:0m7FLjXf readもfreadもposixじゃろうよ
変わらんよ
変わらんよ
670デフォルトの名無しさん
2021/10/17(日) 12:37:50.89ID:QqhGhKAl APIならサクサク快適。
1Gbps/s出る。
標準ライブラリは500Mbps/sくらいしかでない。
1Gbps/s出る。
標準ライブラリは500Mbps/sくらいしかでない。
671デフォルトの名無しさん
2021/10/17(日) 12:39:23.66ID:0m7FLjXf >>670
なんだよapiって
なんだよapiって
672デフォルトの名無しさん
2021/10/17(日) 12:41:11.30ID:XrR+wpGu システムコールと言いたかったんだろうよ。察して差しあげろ
673デフォルトの名無しさん
2021/10/17(日) 12:41:18.69ID:XyIQiUpb674デフォルトの名無しさん
2021/10/17(日) 12:45:16.88ID:QqhGhKAl >>673
俺は見たんだ。
俺は見たんだ。
675デフォルトの名無しさん
2021/10/17(日) 13:12:31.90ID:4Zt4uwKf676デフォルトの名無しさん
2021/10/17(日) 13:26:14.73ID:GKP6XQtx fgetsはバイトを扱うのか文字を扱うのか分かりにくいよね
Javaはバイトを読むInputStreamと文字を読むReaderに分かれてる
ファイルは当然文字だからInputStream、上位のReaderで文字コードや改行コードを加味する
Cはバイトも文字もchar[ ]で扱うからAPIもバイト扱い・文字扱いが混在してる
fgetsは改行コードで区切るからバイトではなく文字を扱う関数のように思えるけど、実際は文字コードなどは考慮されないのでバイト読み取り程度にしか使えないしワイドキャラクタも扱えない
中途半端だと思う
Javaはバイトを読むInputStreamと文字を読むReaderに分かれてる
ファイルは当然文字だからInputStream、上位のReaderで文字コードや改行コードを加味する
Cはバイトも文字もchar[ ]で扱うからAPIもバイト扱い・文字扱いが混在してる
fgetsは改行コードで区切るからバイトではなく文字を扱う関数のように思えるけど、実際は文字コードなどは考慮されないのでバイト読み取り程度にしか使えないしワイドキャラクタも扱えない
中途半端だと思う
677デフォルトの名無しさん
2021/10/17(日) 13:26:48.31ID:GKP6XQtx ファイルは当然文字
678デフォルトの名無しさん
2021/10/17(日) 13:27:18.36ID:GKP6XQtx じゃなくて
ファイルは当然バイトね ごめん、、
ファイルは当然バイトね ごめん、、
679デフォルトの名無しさん
2021/10/17(日) 13:44:25.91ID:mjSP52s5 >>676
時代背景も考えずに中途半端とか言われても…
時代背景も考えずに中途半端とか言われても…
680デフォルトの名無しさん
2021/10/17(日) 13:48:20.62ID:cds0CTiX まぁ、欧米の毛唐どもにもようやく必要性が理解できたchar8_tの導入が進めば文字コードはutf8に統一されていくとは思うけど、
utf8はutf8で冗長コードの問題があるからな…その辺のルールも統一しとかないとバグが量産されることになるな
utf8はutf8で冗長コードの問題があるからな…その辺のルールも統一しとかないとバグが量産されることになるな
681デフォルトの名無しさん
2021/10/17(日) 13:54:50.76ID:XrR+wpGu 2021年になってもテキストファイル読み込みの話をしなければならないC++の哀しさ
682デフォルトの名無しさん
2021/10/17(日) 13:58:16.96ID:7C23oe5i ifstream とか
#include <iostream>
とか観るとダサいなーとしか思わない
#include <iostream>
とか観るとダサいなーとしか思わない
683デフォルトの名無しさん
2021/10/17(日) 14:06:15.29ID:XrR+wpGu Windowsのcode pageのような列挙型と文字セット判定クラスがC++で標準化されてないとテキスト読み込み処理を標準化できないでしょ
文字セット判定クラスは既存の判定ライブラリも標準インターフェースを介して使えるように的な
文字セット判定クラスは既存の判定ライブラリも標準インターフェースを介して使えるように的な
684デフォルトの名無しさん
2021/10/17(日) 21:21:43.52ID:X4C5aaqV すまんもうPythonでよくね
686デフォルトの名無しさん
2021/10/18(月) 07:17:36.06ID:SjUVJOBm C++ではなくCを使うというならまだそいつなりに筋が通る可能性があるが
C++でfgetsにしがみつくのはC++のライブラリについてこれなかっただけの
無能の中の無能だ
C++でfgetsにしがみつくのはC++のライブラリについてこれなかっただけの
無能の中の無能だ
687デフォルトの名無しさん
2021/10/18(月) 07:27:56.24ID:guTQadjs C++でファイル操作にcstdio(というかFILE*)を使うべきだと宣うなら
せめてその場合の例外安全性くらい論じてくれないと話にならな
せめてその場合の例外安全性くらい論じてくれないと話にならな
688デフォルトの名無しさん
2021/10/18(月) 07:44:19.97ID:G16mKgJ/ >>658
Create !
File !
Mapping !
なんでテキストファイルを読み込むだけのためにそんんあ牛刀(しかも移植性が乏しい)を使わねばならんのじゃ……
だいたい標準ストリーム(istream/ ostreamでも良いが)との結合はどうするんじゃ……
std::streambuf派生クラスとか自力で書くんか……
やっぱ頭にうんこ詰まってる人からはうんこしか出てきませんね……
Create !
File !
Mapping !
なんでテキストファイルを読み込むだけのためにそんんあ牛刀(しかも移植性が乏しい)を使わねばならんのじゃ……
だいたい標準ストリーム(istream/ ostreamでも良いが)との結合はどうするんじゃ……
std::streambuf派生クラスとか自力で書くんか……
やっぱ頭にうんこ詰まってる人からはうんこしか出てきませんね……
689デフォルトの名無しさん
2021/10/18(月) 07:47:04.30ID:G16mKgJ/690デフォルトの名無しさん
2021/10/18(月) 07:52:03.70ID:SjUVJOBm691デフォルトの名無しさん
2021/10/18(月) 07:56:09.77ID:G16mKgJ/ >>687
>例外安全性くらい論じてくれないと
cstdioの仕様は突っ込んで調べてはいないがファイルの読み書きに関して
例外をスローすることがあるとしたら改悪で大層な失敗ライブラリとしか言いようが無い
ていうか例外安全というのは眉唾な概念でありまして、
40TBまでメモリを食いつぶしたら例外をスローするが
39.9999TBまでメモリを食いつぶしても何も起きないというコードは
システム全体の動作を担保できておらず設計したとは言えない
もっと定量的にプロアクティブな処置を講じるべきで、システムの正常動作を例外に依存させる設計は無い
>例外安全性くらい論じてくれないと
cstdioの仕様は突っ込んで調べてはいないがファイルの読み書きに関して
例外をスローすることがあるとしたら改悪で大層な失敗ライブラリとしか言いようが無い
ていうか例外安全というのは眉唾な概念でありまして、
40TBまでメモリを食いつぶしたら例外をスローするが
39.9999TBまでメモリを食いつぶしても何も起きないというコードは
システム全体の動作を担保できておらず設計したとは言えない
もっと定量的にプロアクティブな処置を講じるべきで、システムの正常動作を例外に依存させる設計は無い
692デフォルトの名無しさん
2021/10/18(月) 07:57:48.58ID:G16mKgJ/693デフォルトの名無しさん
2021/10/18(月) 08:00:37.32ID:pufTxU/Z 標準じゃないとか言うから突っ込まれてるのに
694デフォルトの名無しさん
2021/10/18(月) 08:13:52.41ID:G16mKgJ/ この議論の中で自作クラス推しはポエミーすぐる
やっぱうんこ製造機な人は仕方が無い
やっぱうんこ製造機な人は仕方が無い
695デフォルトの名無しさん
2021/10/18(月) 08:23:54.90ID:SjUVJOBm >>892
おまえさん他言語への移植がどうたら言ってた?
おまえさん他言語への移植がどうたら言ってた?
696デフォルトの名無しさん
2021/10/18(月) 09:00:47.23ID:SjUVJOBm C++でクラス作るなって
Cで関数作るなに匹敵するすげえ主張だな
最長不倒main関数とかw
Cで関数作るなに匹敵するすげえ主張だな
最長不倒main関数とかw
697デフォルトの名無しさん
2021/10/18(月) 10:44:23.86ID:Qq+Ry0m8 Cだけやたら詳しくてクラスの仕組み知らないウン古参とか居るからな
698デフォルトの名無しさん
2021/10/18(月) 11:01:27.83ID:I7uU9DyP MISRA-C 縛りの組み込み屋とかな
699デフォルトの名無しさん
2021/10/18(月) 11:20:29.21ID:PPwA/bGd C++からCにソースコードを移植せざるを得ないことがあるから、Cプログラマでもクラスやテンプレートの知識は必須でしょ
700デフォルトの名無しさん
2021/10/18(月) 11:27:00.40ID:CHllzYZP cの場合ファイルでクラスを実現するわけだけど、その縛りがある方がきれいになるよね
701デフォルトの名無しさん
2021/10/18(月) 11:35:56.70ID:cow76Y8p twitterでCやC++を検索したい時、検索ボックスに
(C 言語) OR cplusplus OR cpp OR @i -@i lang:ja
と入れると割りといいことが分かった。
さらに、検索ボックスの右にある「…」のボタンを押して「検索を保存」しておくと、この検索文字列が勝手に消えない。
(C 言語) OR cplusplus OR cpp OR @i -@i lang:ja
と入れると割りといいことが分かった。
さらに、検索ボックスの右にある「…」のボタンを押して「検索を保存」しておくと、この検索文字列が勝手に消えない。
702デフォルトの名無しさん
2021/10/18(月) 13:03:36.15ID:nWV7c8cM ::fgetsってstd::getlineに対するメリットある?
703デフォルトの名無しさん
2021/10/18(月) 13:40:59.86ID:inWWc53E getlineがそもそも遅くてダメ
fopenからのfread一択
fopenからのfread一択
704デフォルトの名無しさん
2021/10/18(月) 15:14:30.34ID:PPwA/bGd $ man 3 getline
...
BUGS
There are no wide character versions of getdelim() or getline().
...
BUGS
There are no wide character versions of getdelim() or getline().
705デフォルトの名無しさん
2021/10/18(月) 15:52:23.39ID:r9t2S6+p >>703
fread速くて素敵
fread速くて素敵
706デフォルトの名無しさん
2021/10/18(月) 15:58:38.18ID:bmSCfWZq fopen/fread/fseekだと2GBを超えるファイルが扱えないよね
707デフォルトの名無しさん
2021/10/18(月) 16:22:14.95ID:SjUVJOBm 2G超のファイルはもう珍しくもなくなったな
708デフォルトの名無しさん
2021/10/18(月) 19:03:20.24ID:PPwA/bGd >>706
fread()は2GB制約なく扱えるのでは?
fread()は2GB制約なく扱えるのでは?
709デフォルトの名無しさん
2021/10/18(月) 19:10:28.52ID:SjUVJOBm 狭い視野でイキッてるヒヨッ子
710デフォルトの名無しさん
2021/10/18(月) 19:38:54.73ID:bmSCfWZq711デフォルトの名無しさん
2021/10/18(月) 19:53:44.83ID:wnQbvQnY 2GBってOSの制限じゃなくて?
712デフォルトの名無しさん
2021/10/18(月) 19:56:34.12ID:PPwA/bGd >>710
「ダメでしょ」っていう無駄な煽り質問じゃなくて、fread()の制約について触れたブログのURLとか教えてもらえますか?
「ダメでしょ」っていう無駄な煽り質問じゃなくて、fread()の制約について触れたブログのURLとか教えてもらえますか?
713デフォルトの名無しさん
2021/10/18(月) 20:12:41.63ID:SjUVJOBm MSVCつってんだろ
そっから自分で調べろよ
そっから自分で調べろよ
714デフォルトの名無しさん
2021/10/18(月) 20:19:55.17ID:PPwA/bGd >>713
見つからないンだわ
見つからないンだわ
715デフォルトの名無しさん
2021/10/18(月) 20:20:14.22ID:q3S383yy716デフォルトの名無しさん
2021/10/18(月) 20:40:37.41ID:guTQadjs717デフォルトの名無しさん
2021/10/18(月) 20:48:11.38ID:9/kwvMtE >>711
今時のOSで2GBの壁とか無いでしょ
今時のOSで2GBの壁とか無いでしょ
718デフォルトの名無しさん
2021/10/18(月) 20:52:27.87ID:PPwA/bGd 書いてから気づいたけど >>714 は、見つからねンだわ、のほうがよかった
719デフォルトの名無しさん
2021/10/19(火) 00:01:14.73ID:L2ZQN19z MSVCのランタイムでfread()が2GB越えファイルを扱えないって話のURLはどこですか?
720デフォルトの名無しさん
2021/10/19(火) 00:34:16.59ID:FM0S3WDg >>716
スコープを抜けたらファイルをクローズしてくれるから安全、と考える
藻前の考えが浅いのもまた明らかだ
システム的にファイルをぶち切られること自体が致命的だったら?
また、クローズがエラーになったとき何が起きるか
(ただクローズするだけのクラスならエラー通知先は無い。例外を飛ばしたら即パニック
というわけで実用的なリソースリーク対策はコードの追加を伴うから
fgets()にリーク対策するのと言うほど違いが無いワケ
スコープを抜けたらファイルをクローズしてくれるから安全、と考える
藻前の考えが浅いのもまた明らかだ
システム的にファイルをぶち切られること自体が致命的だったら?
また、クローズがエラーになったとき何が起きるか
(ただクローズするだけのクラスならエラー通知先は無い。例外を飛ばしたら即パニック
というわけで実用的なリソースリーク対策はコードの追加を伴うから
fgets()にリーク対策するのと言うほど違いが無いワケ
721デフォルトの名無しさん
2021/10/19(火) 00:41:16.25ID:FM0S3WDg 例外安全はやれるならやった方が良いのは認めるが
他人様が作ったライブラリの中に生ポをメンバにもつクラスがあったら穴ができる
まだこれぐらいなら静的解析で発見できるかもしれんが
上で述べたようなcloseのエラーチェックのスキップとか循環参照とかは機械的検出が難しい
例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体するのはソフトウェア工学的ではない
というわけでやっぱfgets()を使いつつ例外を起こさないように書くのに比べて言うほどマシでないワケ
他人様が作ったライブラリの中に生ポをメンバにもつクラスがあったら穴ができる
まだこれぐらいなら静的解析で発見できるかもしれんが
上で述べたようなcloseのエラーチェックのスキップとか循環参照とかは機械的検出が難しい
例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体するのはソフトウェア工学的ではない
というわけでやっぱfgets()を使いつつ例外を起こさないように書くのに比べて言うほどマシでないワケ
722デフォルトの名無しさん
2021/10/19(火) 02:03:24.24ID:2It6fcyB 君が例外安全というものについて何一つ知らない事はよく分かった
無知は罪じゃないから今から勉強し直そうね
知ってるふりしていい加減な付け焼き刃の知識を振りかざすのは恥ずかしいだけじゃなくてお客や同僚に迷惑を掛けるからね
無知は罪じゃないから今から勉強し直そうね
知ってるふりしていい加減な付け焼き刃の知識を振りかざすのは恥ずかしいだけじゃなくてお客や同僚に迷惑を掛けるからね
723デフォルトの名無しさん
2021/10/19(火) 02:48:34.85ID:gI621CUN コードや証拠もなしに噛み合わない話の空中戦とかするくらいなら反論しなくていいから黙ってよう
どちらが正しいかはみんな分かっているのだから
どちらが正しいかはみんな分かっているのだから
724デフォルトの名無しさん
2021/10/19(火) 06:05:15.24ID:KuG8Rhix 了解
725デフォルトの名無しさん
2021/10/19(火) 06:18:55.46ID:/lTW/4j8 cout << sizeof ftell(nullptr);
726デフォルトの名無しさん
2021/10/19(火) 07:21:43.01ID:N+EpsguK 自分で試す能力がなくてURL乞食しとんのか
727デフォルトの名無しさん
2021/10/19(火) 07:46:29.59ID:FM0S3WDg728デフォルトの名無しさん
2021/10/19(火) 07:57:14.86ID:FM0S3WDg ていうか知能の問題かもしれん……
>どちらが正しいかはみんな分かっているのだから
衆愚の言い草
「何が」例外安全なのかきちんと定義してから出直してホスイ、
>どちらが正しいかはみんな分かっているのだから
衆愚の言い草
「何が」例外安全なのかきちんと定義してから出直してホスイ、
729デフォルトの名無しさん
2021/10/19(火) 08:04:24.05ID:N+EpsguK 暴れてるやつRAIIって発想もないようだしな
730デフォルトの名無しさん
2021/10/19(火) 08:46:39.19ID:T9srRJav >>726
Windows環境自体がないのでは
Windows環境自体がないのでは
731デフォルトの名無しさん
2021/10/19(火) 08:51:30.49ID:gI621CUN 5chは煽ると答えが返ってくるという都市伝説があるらしい
732デフォルトの名無しさん
2021/10/19(火) 10:31:03.98ID:L2ZQN19z バグ報告する場合は再現条件を提示する責任がある
再現できなければ「おま環」で放置される
もしかしてこのスレの住人は、立民とか共産党の支持者だったりするの?
挙証責任って概念を知らないかな
モリカケ・桜を見る会問題にのめりこむような人は技術系の職業に向いてないから転職したほうがいいね
再現できなければ「おま環」で放置される
もしかしてこのスレの住人は、立民とか共産党の支持者だったりするの?
挙証責任って概念を知らないかな
モリカケ・桜を見る会問題にのめりこむような人は技術系の職業に向いてないから転職したほうがいいね
733デフォルトの名無しさん
2021/10/19(火) 10:37:08.97ID:JueBMEYA 最後の一文、それを断言できるのはその問題にのめりこんでる証拠のような・・・
734デフォルトの名無しさん
2021/10/19(火) 10:38:50.31ID:L2ZQN19z お前は泥棒をしたのだから泥棒したことをお前自身が証明しろ、と言いがかりをつけ続ける取調官とか怖いだろ
それと同じことを一部の本スレ住人や立民共産信者は言ってるわけだよ
それと同じことを一部の本スレ住人や立民共産信者は言ってるわけだよ
735デフォルトの名無しさん
2021/10/19(火) 10:46:13.46ID:ZI1Nh3C2 モリカケ・桜を見る会問題にのめりこんでいない人は
突然無関係のスレでモリカケ・桜を見る会問題の話題を出さないからね
常に意識している(のめりこんでいる)から技術系のスレで政治的な話をしてしまう
突然無関係のスレでモリカケ・桜を見る会問題の話題を出さないからね
常に意識している(のめりこんでいる)から技術系のスレで政治的な話をしてしまう
736デフォルトの名無しさん
2021/10/19(火) 10:55:44.60ID:L2ZQN19z 陰謀論など思い込みの激しい人は正義感でやってるから周囲の忠告に耳を貸さない
信者同士が共鳴しあうエコーチェンバー効果
信者同士が共鳴しあうエコーチェンバー効果
737デフォルトの名無しさん
2021/10/19(火) 11:12:58.88ID:ZI1Nh3C2 「最近、この沼にはまって抜け出せなくなる人が多いんだよ、困ったものだね」と言いながら沼にはまっている人↑
738デフォルトの名無しさん
2021/10/19(火) 11:22:09.22ID:L2ZQN19z MSVCでfread()が2GB以上のファイルを扱えないことを証明してくれさえすればいいんだよ、簡単だろ?
739デフォルトの名無しさん
2021/10/19(火) 11:31:07.37ID:L2ZQN19z 自分は雑なバグ報告しておいて、相手には執拗に問題解決を迫るキチガイとかイヤだろ?
740デフォルトの名無しさん
2021/10/19(火) 11:40:48.93ID:gI621CUN そもそもfreadと何をどんな環境で比較して結果どうだったなどの証拠がない件
741デフォルトの名無しさん
2021/10/19(火) 12:09:53.53ID:ZI1Nh3C2 正直興味のない話なので関わらなきゃいいじゃんって言われるだろうけど
「相手には執拗に問題解決を迫るキチガイとかイヤだろ?」と行っている本人が「証明してくれさえすればいいんだ」と迫っているところを見る限り
やっぱり本人も沼に入っているのに気づいていないんだな、と感じる小雨が降る今日この頃
「相手には執拗に問題解決を迫るキチガイとかイヤだろ?」と行っている本人が「証明してくれさえすればいいんだ」と迫っているところを見る限り
やっぱり本人も沼に入っているのに気づいていないんだな、と感じる小雨が降る今日この頃
742デフォルトの名無しさん
2021/10/19(火) 12:19:05.04ID:L2ZQN19z いまさら何言ってんだ?
このスレは、ダニング=クルーガー効果でイキったバカをからかうためのスレだぞ
このスレは、ダニング=クルーガー効果でイキったバカをからかうためのスレだぞ
743デフォルトの名無しさん
2021/10/19(火) 12:35:47.82ID:N+EpsguK 都合の悪いものは見えないらしいな
744デフォルトの名無しさん
2021/10/19(火) 12:50:43.47ID:gI621CUN スレタイトルのとおりC++に関する相談をするためのスレですよ
ID:L2ZQN19z7 は他人を煽るためだけに書き込んでるように見えるので少し風当たりが強くなってるだけです
ID:L2ZQN19z7 は他人を煽るためだけに書き込んでるように見えるので少し風当たりが強くなってるだけです
745デフォルトの名無しさん
2021/10/19(火) 13:20:26.19ID:L2ZQN19z マイクロソフトのような大企業がfread()の致命的な不具合を永年にわたって野放しにするはずがないという常識や判断力すらない人は、いろんな陰謀論にハマるだろうね
ご本人はそれはそれで楽しい人生なんだろうけどIT技術者としてはどうかなって話
ま、反ワクチンの医者もごくまれにいるから、陰謀論にハマる人はどんな業界にもいるんだろう
ご本人はそれはそれで楽しい人生なんだろうけどIT技術者としてはどうかなって話
ま、反ワクチンの医者もごくまれにいるから、陰謀論にハマる人はどんな業界にもいるんだろう
746デフォルトの名無しさん
2021/10/19(火) 13:25:05.49ID:L2ZQN19z ビル・ゲイツがワクチンの「狂った陰謀論」を改めて否定 | Forbes JAPAN
https://forbesjapan.com/articles/detail/39513
2021/01/28 12:30
マイクロソフトの共同創業者でビリオネアのビル・ゲイツは、パンデミックを受けてSNS上で拡散した、彼に関する陰謀論の多さに「非常に驚いている」と述べ、ワクチンの普及の妨げになりかねない誤情報への懸念を示した。
ゲイツは1月27日のロイターの取材に、彼と米国のコロナ対策のトップであるアンソニー・ファウチ博士についての「狂った陰謀論」は、パンデミックに対する恐怖心とソーシャルメディアの台頭により引き起こされた可能性が高いと述べた。
パンデミックに関する最も目を引く陰謀論のいくつかは、ゲイツが「世界の人々にマイクロチップを埋め込むためにワクチンを活用しようとしている」という、根拠のない主張に基づいている。
ゲイツは、人々が本当にこれらの陰謀論を信じているのかどうかを知りたいと話した。「それは、人々の行動をどのように変えるのだろう? そして、我々はどのようにして、これを最小限に抑えるべきだったのだろう?」と、彼は問いかけた。
https://forbesjapan.com/articles/detail/39513
2021/01/28 12:30
マイクロソフトの共同創業者でビリオネアのビル・ゲイツは、パンデミックを受けてSNS上で拡散した、彼に関する陰謀論の多さに「非常に驚いている」と述べ、ワクチンの普及の妨げになりかねない誤情報への懸念を示した。
ゲイツは1月27日のロイターの取材に、彼と米国のコロナ対策のトップであるアンソニー・ファウチ博士についての「狂った陰謀論」は、パンデミックに対する恐怖心とソーシャルメディアの台頭により引き起こされた可能性が高いと述べた。
パンデミックに関する最も目を引く陰謀論のいくつかは、ゲイツが「世界の人々にマイクロチップを埋め込むためにワクチンを活用しようとしている」という、根拠のない主張に基づいている。
ゲイツは、人々が本当にこれらの陰謀論を信じているのかどうかを知りたいと話した。「それは、人々の行動をどのように変えるのだろう? そして、我々はどのようにして、これを最小限に抑えるべきだったのだろう?」と、彼は問いかけた。
747デフォルトの名無しさん
2021/10/19(火) 13:25:23.12ID:4nkSMT7f Microsoft、不具合修正一年くらいかかったよ
748デフォルトの名無しさん
2021/10/19(火) 13:53:44.09ID:emsejTNf MSは直らんなあ
google よりはマシかもな
google よりはマシかもな
749デフォルトの名無しさん
2021/10/19(火) 15:13:15.33ID:gI621CUN 単発IDは自演の可能性ありますね
750デフォルトの名無しさん
2021/10/19(火) 19:19:45.97ID:GtxXqLyf 2000年ごろのLinuxユーザーなら、ゲイツがワクチンにウィルス仕込んでると大騒ぎしてただろうけどな。
751デフォルトの名無しさん
2021/10/19(火) 19:24:26.03ID:GtxXqLyf >>732
ご指摘の動作は弊社ソフトウェア製品の問題点であることが確認されました。
引き続き調査を行います。
進展状況はID2273405でご確認できます。
今後も弊社製品ご愛顧のほどよろしくお願いします。
ご指摘の動作は弊社ソフトウェア製品の問題点であることが確認されました。
引き続き調査を行います。
進展状況はID2273405でご確認できます。
今後も弊社製品ご愛顧のほどよろしくお願いします。
752デフォルトの名無しさん
2021/10/19(火) 19:28:33.46ID:GtxXqLyf753デフォルトの名無しさん
2021/10/19(火) 19:52:06.47ID:L2ZQN19z754デフォルトの名無しさん
2021/10/19(火) 19:56:28.13ID:GtxXqLyf >>753
桜を見る会に桜井誠は呼ばれたのか?
桜を見る会に桜井誠は呼ばれたのか?
756デフォルトの名無しさん
2021/10/19(火) 20:09:58.44ID:L2ZQN19z 違います
今後の心配は園遊会やお正月などのお食事会にモェ呼ばれるのか、という点です
今後の心配は園遊会やお正月などのお食事会にモェ呼ばれるのか、という点です
757デフォルトの名無しさん
2021/10/20(水) 07:14:37.76ID:0k8Pnquo758デフォルトの名無しさん
2021/10/20(水) 07:16:51.24ID:0k8Pnquo B リソース解放を解放しない瑕疵があるオブジェクトの混入が無いことをどうやって保証するのか?
という3つの問題提起をしているのに対して、あいまいに取り繕って逃げたのが>>722
@〜Bに定説が無いとすれば(実際無いのだが)、例外安全というのは信奉する馬鹿の数だけ定義があるという話
という3つの問題提起をしているのに対して、あいまいに取り繕って逃げたのが>>722
@〜Bに定説が無いとすれば(実際無いのだが)、例外安全というのは信奉する馬鹿の数だけ定義があるという話
759デフォルトの名無しさん
2021/10/20(水) 07:19:57.61ID:NMVwWGr0 盲目じゃねえし
uncaught_excptionsも知らんようだな
って言うとにわかで調べてシッタカこくんだろうけど
今の今までおくびにも出さなかったことで
どの程度の野郎かは察しがついてる
uncaught_excptionsも知らんようだな
って言うとにわかで調べてシッタカこくんだろうけど
今の今までおくびにも出さなかったことで
どの程度の野郎かは察しがついてる
760デフォルトの名無しさん
2021/10/20(水) 07:21:14.97ID:0k8Pnquo だいたい火災で炎上するビルの8階から人が飛び降りたとして、
例外安全とやらでできることはせいぜい人を地面に軟着陸させて生命を守るぐらいの話で、
ビルの火災を消化はしないし(それをやるのは消防署
消化後のビルを復旧はしないし(それをやるのは各種の工事屋
復旧した8界のオフィスに飛び降りた人を戻して業務を再開させることもしない(それをやるのやEmployer
普通の人はまず火災を防ぐことを第一に目指すのだが、
例外安全主義者はそんなスタイルを古いと言い、例外安全に作っとけば安全と言い張るのだ
例外安全とやらでできることはせいぜい人を地面に軟着陸させて生命を守るぐらいの話で、
ビルの火災を消化はしないし(それをやるのは消防署
消化後のビルを復旧はしないし(それをやるのは各種の工事屋
復旧した8界のオフィスに飛び降りた人を戻して業務を再開させることもしない(それをやるのやEmployer
普通の人はまず火災を防ぐことを第一に目指すのだが、
例外安全主義者はそんなスタイルを古いと言い、例外安全に作っとけば安全と言い張るのだ
761デフォルトの名無しさん
2021/10/20(水) 07:31:45.94ID:NMVwWGr0 全然関係ねえよ
マジでビルから飛び降りて氏んだら?
マジでビルから飛び降りて氏んだら?
762デフォルトの名無しさん
2021/10/20(水) 07:33:15.63ID:0k8Pnquo763デフォルトの名無しさん
2021/10/20(水) 07:35:17.39ID:0k8Pnquo でfgets()に戻るが、以下のコードの例外の捕捉のコストは話の本筋ではないので無視していただきたいのだが
(そのコストが気になるなら「スコープを抜けたら閉じるFILE*」みたいなブツを作ったらfclose()のエラー処理以外は同じにできる)、
void foo() {
FILE* fp = fopen(...); // fpがNULLだった場合のチェックは記載省略
try {
Bar x, y, z;
(fgets()とかのコード)
} catch (Exception ex)
fclose(fp)
}
}
とかなコードを見たら普通の人は「chatchに飛んできて大丈夫なんか?」とtryブロック内をチェックするが
(x, y, zの解放が保証される、とかは関係無しに
例外安全主義者にかかってはそんなことはお構いなしである。とにかく安全と言い張る
(そのコストが気になるなら「スコープを抜けたら閉じるFILE*」みたいなブツを作ったらfclose()のエラー処理以外は同じにできる)、
void foo() {
FILE* fp = fopen(...); // fpがNULLだった場合のチェックは記載省略
try {
Bar x, y, z;
(fgets()とかのコード)
} catch (Exception ex)
fclose(fp)
}
}
とかなコードを見たら普通の人は「chatchに飛んできて大丈夫なんか?」とtryブロック内をチェックするが
(x, y, zの解放が保証される、とかは関係無しに
例外安全主義者にかかってはそんなことはお構いなしである。とにかく安全と言い張る
764デフォルトの名無しさん
2021/10/20(水) 07:39:44.59ID:kO478Zp/ バカの主張: バグがあるかも知れないから例外安全は「使い物にならない」
アホすぎだろ…
アホすぎだろ…
765デフォルトの名無しさん
2021/10/20(水) 07:44:50.14ID:0k8Pnquo766デフォルトの名無しさん
2021/10/20(水) 07:45:51.66ID:GCto648C >>763
x,y,zのデストラクタならcatchに飛んだ時に呼ばれることは保証されてるけど…?
例えばyのコンストラクタで例外飛んでもxは~Bar()呼んでzは呼ばないくらいコンパイラがやってくれるけど…?
そういうの忘れずやってくれるのがコンパイラだから任せようぜっていうのがRAIIなんだけど…?
まさかこんな事も知らずに例外安全がどうのと偉そうに論じてたの?嘘だろ?
x,y,zのデストラクタならcatchに飛んだ時に呼ばれることは保証されてるけど…?
例えばyのコンストラクタで例外飛んでもxは~Bar()呼んでzは呼ばないくらいコンパイラがやってくれるけど…?
そういうの忘れずやってくれるのがコンパイラだから任せようぜっていうのがRAIIなんだけど…?
まさかこんな事も知らずに例外安全がどうのと偉そうに論じてたの?嘘だろ?
767デフォルトの名無しさん
2021/10/20(水) 07:47:08.92ID:GCto648C >>765
お前はもう喋るなド初心者
お前はもう喋るなド初心者
768デフォルトの名無しさん
2021/10/20(水) 07:47:29.23ID:0k8Pnquo769デフォルトの名無しさん
2021/10/20(水) 07:55:59.64ID:GCto648C770デフォルトの名無しさん
2021/10/20(水) 08:05:08.97ID:0k8Pnquo >>769
質問ですが例外安全の教科書として藻前は何を読んだことがあるのでぃすか?
質問ですが例外安全の教科書として藻前は何を読んだことがあるのでぃすか?
771デフォルトの名無しさん
2021/10/20(水) 08:13:47.58ID:kO478Zp/ > 例外安全主義者にかかってはそんなことはお構いなしである。とにかく安全と言い張る
どこの主張を言ってるのか知らんけどどう見てもお前の方が「文盲」なわけだがw
どこの主張を言ってるのか知らんけどどう見てもお前の方が「文盲」なわけだがw
772デフォルトの名無しさん
2021/10/20(水) 08:27:40.98ID:DhnN+uGO >>763
RAII を使わず明示的な catch でリソース解放しているコードを見て、一般的な C++ プログラマは「危険」だと見るのでは?
その例だと「fgets()とかのコード」内の return などで fp がリークする可能性があるわけで。
RAII を使わず明示的な catch でリソース解放しているコードを見て、一般的な C++ プログラマは「危険」だと見るのでは?
その例だと「fgets()とかのコード」内の return などで fp がリークする可能性があるわけで。
773デフォルトの名無しさん
2021/10/20(水) 08:31:29.32ID:xpWbVnlK 誰が「例外安全なら大丈夫」と言っているの?レス番は?
774デフォルトの名無しさん
2021/10/20(水) 09:12:35.95ID:OEiI06HQ Kuso.KENTA.
775デフォルトの名無しさん
2021/10/20(水) 09:21:20.26ID:glY3n63N いつになっても
do {
} while(0);
でbreakをgoto代わりに使うしかないのか
do {
} while(0);
でbreakをgoto代わりに使うしかないのか
776デフォルトの名無しさん
2021/10/20(水) 09:23:08.99ID:NMVwWGr0777デフォルトの名無しさん
2021/10/20(水) 09:35:49.31ID:OEiI06HQ778デフォルトの名無しさん
2021/10/20(水) 09:39:48.17ID:OEiI06HQ >>757
2GB以上じゃなくて良いけど
そこそこの大きさのファイルで
書き込んでcloseしてる途中に
電源OFFとかになったら例外どころじゃないんだが
最近のOSはちゃんとコンデンサ放電仕切るまでの間に書き込み終了するんだろうか
2GB以上じゃなくて良いけど
そこそこの大きさのファイルで
書き込んでcloseしてる途中に
電源OFFとかになったら例外どころじゃないんだが
最近のOSはちゃんとコンデンサ放電仕切るまでの間に書き込み終了するんだろうか
779デフォルトの名無しさん
2021/10/20(水) 09:44:46.84ID:OEiI06HQ >>760
サンフランシスコ地震で高速道路崩落←直後に「日本では起こり得ない」と言われた
インドネシアの津波で街が吹っ飛ぶ←直後に「日本では起こり得ない」と言われた
チェルノブイリで原発爆発←直後に「日本では起こり得ない」と言われた
武漢でコロナ感染者急増でパニック&パンデミック←直後に「日本では起こり得ない」と言われた
いつも否定したがる人はいるしそれを信じたがるひともいる
サンフランシスコ地震で高速道路崩落←直後に「日本では起こり得ない」と言われた
インドネシアの津波で街が吹っ飛ぶ←直後に「日本では起こり得ない」と言われた
チェルノブイリで原発爆発←直後に「日本では起こり得ない」と言われた
武漢でコロナ感染者急増でパニック&パンデミック←直後に「日本では起こり得ない」と言われた
いつも否定したがる人はいるしそれを信じたがるひともいる
780デフォルトの名無しさん
2021/10/20(水) 11:10:43.38ID:NMVwWGr0 >>778
UPSもアレスタも知らないど素人w
UPSもアレスタも知らないど素人w
781デフォルトの名無しさん
2021/10/20(水) 11:15:17.23ID:glY3n63N ファイル編集中、Ctrl+Sを押下して保存しようとした瞬間に停電になったことがある
再起動後、ファイルは存在しているのに中身は\0で埋められていたよ
再起動後、ファイルは存在しているのに中身は\0で埋められていたよ
782デフォルトの名無しさん
2021/10/20(水) 11:16:33.48ID:PaxGKk4c783デフォルトの名無しさん
2021/10/20(水) 11:28:28.97ID:EqJEar1P784デフォルトの名無しさん
2021/10/20(水) 11:41:33.49ID:Px+syONf いつもの
785デフォルトの名無しさん
2021/10/20(水) 11:43:42.24ID:BFKUlxpT 786以降C++なコードもC++なURLも載せないやつは発言禁止な
786デフォルトの名無しさん
2021/10/20(水) 12:28:18.88ID:vkb7a42p >>763
try内のコードが例外出さない限りcloseされない
try内のコードが例外出さない限りcloseされない
787デフォルトの名無しさん
2021/10/20(水) 12:55:58.99ID:Px+syONf 確かにそうだ
すっかりfinallyのつもりで読んでた
やはりRAIIは正義
すっかりfinallyのつもりで読んでた
やはりRAIIは正義
788デフォルトの名無しさん
2021/10/20(水) 13:11:06.68ID:NMVwWGr0 いーやfreadで2G超のファイルはvsでも完全にあつかえる不都合はない
と、自信を持って断言できないゴミが
URL乞食でドヤってるのバカすぎ
と、自信を持って断言できないゴミが
URL乞食でドヤってるのバカすぎ
789デフォルトの名無しさん
2021/10/20(水) 13:28:11.75ID:vkb7a42p C++にもfinally欲しい
790デフォルトの名無しさん
2021/10/20(水) 13:30:01.90ID:OEiI06HQ fseek()/ftell()が32bit用でfseeki64()/ftelli64()の方を使ってないというオチか
791デフォルトの名無しさん
2021/10/20(水) 13:36:27.87ID:glY3n63N 自信をもって断言したところで、モリカケ・桜を見る会と同じことになるだけだよ
アベノセイダーズは不具合を見つけてくるまで決して許さない
アベノセイダーズは不具合を見つけてくるまで決して許さない
792デフォルトの名無しさん
2021/10/20(水) 13:39:14.76ID:glY3n63N >>789
コストラクタでラムダ式をメンバ変数に受け取りデストラクタでそのラムダ式のメンバ変数を実行するクラステンプレートを自作すれば問題解決
コストラクタでラムダ式をメンバ変数に受け取りデストラクタでそのラムダ式のメンバ変数を実行するクラステンプレートを自作すれば問題解決
793デフォルトの名無しさん
2021/10/20(水) 13:41:35.24ID:NsIIvpqv fseekの引数はなぜああしたんだろうね
794デフォルトの名無しさん
2021/10/20(水) 13:46:56.17ID:glY3n63N 宇宙人がいないことを証明するための労力たるや
795デフォルトの名無しさん
2021/10/20(水) 13:50:04.27ID:NMVwWGr0 不都合があるという主張であろうと
不都合がないという主張であろうと
自分でコード書けないゴミは引っ込んでろ
不都合がないという主張であろうと
自分でコード書けないゴミは引っ込んでろ
796デフォルトの名無しさん
2021/10/20(水) 13:53:43.95ID:glY3n63N >>795
そのとおりだな、まずお前が引っ込め
そのとおりだな、まずお前が引っ込め
797デフォルトの名無しさん
2021/10/20(水) 14:13:30.21ID:glY3n63N 再帰呼び出し
我々の宇宙は高度な文明を持つ知的生命体の実験により作られたものであると推測するハーバード大学の科学者 : カラパイア
https://karapaia.com/archives/52306877.html
我々の宇宙は高度な文明を持つ知的生命体の実験により作られたものであると推測するハーバード大学の科学者 : カラパイア
https://karapaia.com/archives/52306877.html
798デフォルトの名無しさん
2021/10/20(水) 14:38:01.57ID:NMVwWGr0799デフォルトの名無しさん
2021/10/20(水) 14:47:18.86ID:BFKUlxpT #include <iostream>
#include <fstream>
#include <vector>
#include <cstdio>
#include <algorithm>
int main()
{
const char path[] = { "hoge.dat" };
std::vector<char> buffer(1024 * 1024); // 1MB
std::ofstream f(path, std::ios::binary);
for (int gb = 0; gb < 5; ++gb) {
std::fill(buffer.begin(), buffer.end(), static_cast<char>(gb));
for (int i = 0; i < 1024; ++i) f.write(buffer.data(), buffer.size());
}
f.close();
#pragma warning(suppress : 4996)
std::FILE* fp = std::fopen(path, "rb");
for (int i = 0; i < 5 * 1024; ++i) {
if (std::fread(buffer.data(), sizeof(buffer[0]), buffer.size(), fp) < buffer.size()) return 1;
for (auto ch : buffer) if (ch != static_cast<char>(i / 1024)) return 2;
}
std::fclose(fp);
std::cout << static_cast<int>(buffer[buffer.size() - 1]) << std::endl;
return 0;
}
とりあえずVC++2019でx86(32bit)ビルドして実行したら終了コード0の出力4だったのでfread 4GBは超えられてる模様
#include <fstream>
#include <vector>
#include <cstdio>
#include <algorithm>
int main()
{
const char path[] = { "hoge.dat" };
std::vector<char> buffer(1024 * 1024); // 1MB
std::ofstream f(path, std::ios::binary);
for (int gb = 0; gb < 5; ++gb) {
std::fill(buffer.begin(), buffer.end(), static_cast<char>(gb));
for (int i = 0; i < 1024; ++i) f.write(buffer.data(), buffer.size());
}
f.close();
#pragma warning(suppress : 4996)
std::FILE* fp = std::fopen(path, "rb");
for (int i = 0; i < 5 * 1024; ++i) {
if (std::fread(buffer.data(), sizeof(buffer[0]), buffer.size(), fp) < buffer.size()) return 1;
for (auto ch : buffer) if (ch != static_cast<char>(i / 1024)) return 2;
}
std::fclose(fp);
std::cout << static_cast<int>(buffer[buffer.size() - 1]) << std::endl;
return 0;
}
とりあえずVC++2019でx86(32bit)ビルドして実行したら終了コード0の出力4だったのでfread 4GBは超えられてる模様
800デフォルトの名無しさん
2021/10/20(水) 15:12:34.13ID:glY3n63N801デフォルトの名無しさん
2021/10/20(水) 15:18:25.38ID:BFKUlxpT 今日は2つのIDで頑張ってるみたいだね
802デフォルトの名無しさん
2021/10/20(水) 15:29:22.63ID:NMVwWGr0 プログラム技術板の正規メンバに
クソ以外の乞食が何か寝言ぬかしとんな
クソ以外の乞食が何か寝言ぬかしとんな
803デフォルトの名無しさん
2021/10/20(水) 15:34:29.03ID:glY3n63N お前らの家の冷蔵庫にエルビス・プレスリーがいないからといって、この世にエルビス・プレスリーがいないことの証明にはならないんだよ
血を吐くまで探せ
血を吐くまで探せ
804デフォルトの名無しさん
2021/10/20(水) 15:55:06.91ID:4r95dvH8 不具合あるのを証明したほうがてっとりばやい
805デフォルトの名無しさん
2021/10/20(水) 16:02:32.88ID:glY3n63N あぁ?わかって言ってんのか?
泥棒の証拠を泥棒に探させるのがアベガー品質だぞ
泥棒の証拠を泥棒に探させるのがアベガー品質だぞ
806デフォルトの名無しさん
2021/10/20(水) 16:09:49.79ID:Px+syONf807デフォルトの名無しさん
2021/10/20(水) 16:17:28.71ID:glY3n63N 挙証責任をガン無視できる文部科学省元事務次官前川喜平こそ最強
座右の銘は面従腹背、ライフワークは貧困調査
座右の銘は面従腹背、ライフワークは貧困調査
808デフォルトの名無しさん
2021/10/20(水) 16:39:46.06ID:NMVwWGr0 キチガイ極左は内ゲバで共食いしとれ
809デフォルトの名無しさん
2021/10/21(木) 00:40:30.45ID:ObBh/rk9 >>806
俺はcの標準ライブラリ使うならosの関数使えって言ってた人でアンカの中には登場しない人だけど
「根拠不明の2GB制限」についてはlarge file問題というのが昔あった
https://en.wikipedia.org/wiki/Large-file_support
LinuxなどUnix系が64bit環境にほぼ移行した現在その問題はレアケースだとは思うけど
32bitアプリが割と残っているWindowsだと実際のところどうなのか分からない
でもfreadくらいは出来そうだと考えわざわざコード書いただけ(>>799)
ちなみにLinuxでもdebian系のantiX 19.4 32bit環境では#define _FILE_OFFSET_BITS 64がないとfopenがNULLを返していた
俺はcの標準ライブラリ使うならosの関数使えって言ってた人でアンカの中には登場しない人だけど
「根拠不明の2GB制限」についてはlarge file問題というのが昔あった
https://en.wikipedia.org/wiki/Large-file_support
LinuxなどUnix系が64bit環境にほぼ移行した現在その問題はレアケースだとは思うけど
32bitアプリが割と残っているWindowsだと実際のところどうなのか分からない
でもfreadくらいは出来そうだと考えわざわざコード書いただけ(>>799)
ちなみにLinuxでもdebian系のantiX 19.4 32bit環境では#define _FILE_OFFSET_BITS 64がないとfopenがNULLを返していた
810デフォルトの名無しさん
2021/10/21(木) 00:51:53.61ID:l0SlZ35R 話の肝は「私が間違ってました。ごめんなさい」と素直に言えるかどうかなわけで
小室文書みたいな屁理屈の羅列はいらねンだわ
小室文書みたいな屁理屈の羅列はいらねンだわ
811デフォルトの名無しさん
2021/10/21(木) 01:06:38.58ID:5bux1k1I812デフォルトの名無しさん
2021/10/21(木) 01:19:29.04ID:ObBh/rk9 ちなみに>>809の「cの標準ライブラリ使うならosの関数」という意味で以前実験した結果も貼っとく
read, fread, std::ifstream::readの比較
https://ideone.com/H2jc7B
systemdのユーザーごとのRAMディスクを使っているのでそれがある環境でだけ動作する
ubuntu 20.04 64bit環境で実行した結果だと↓
$ g++ -O2 test.cpp -o test
$ ./test
227
267
225
$
read, fread, std::ifstream::readの比較
https://ideone.com/H2jc7B
systemdのユーザーごとのRAMディスクを使っているのでそれがある環境でだけ動作する
ubuntu 20.04 64bit環境で実行した結果だと↓
$ g++ -O2 test.cpp -o test
$ ./test
227
267
225
$
813デフォルトの名無しさん
2021/10/21(木) 03:46:14.13ID:Y6x8PTxQ >>811
前者がmadeで後者がmaidだからじゃね?
前者がmadeで後者がmaidだからじゃね?
814デフォルトの名無しさん
2021/10/21(木) 07:45:14.90ID:5PpYpVBN 以前はメードだったと思うけどね
815デフォルトの名無しさん
2021/10/21(木) 11:19:37.65ID:l0SlZ35R ババ抜きはOld maidの日本語訳だよ
セクシズムやエイジズムはポリコレの立場から見てどうだろうね
セクシズムやエイジズムはポリコレの立場から見てどうだろうね
816デフォルトの名無しさん
2021/10/21(木) 12:39:37.82ID:u1ltZUWw regexで\dを使いたい場合はどうやるん?
817デフォルトの名無しさん
2021/10/21(木) 14:10:28.52ID:ObBh/rk9818デフォルトの名無しさん
2021/10/21(木) 17:33:55.95ID:MfhbDLcG >>812
その比較でなんで fread だけ遅いんだ?と思ってコード見たら fread じゃなくて fgets になってた。
あと read_cpp_standard() の if (std::cin.fail()) もたぶん f.fail() の間違い。
その比較でなんで fread だけ遅いんだ?と思ってコード見たら fread じゃなくて fgets になってた。
あと read_cpp_standard() の if (std::cin.fail()) もたぶん f.fail() の間違い。
819デフォルトの名無しさん
2021/10/21(木) 18:24:19.20ID:/1ln80gU >>815
フェミが言葉狩りのネタにしないのは何故
フェミが言葉狩りのネタにしないのは何故
820デフォルトの名無しさん
2021/10/21(木) 18:42:48.64ID:7ERuyWg6 言葉狩りなんてないから
821デフォルトの名無しさん
2021/10/21(木) 18:56:39.47ID:ObBh/rk9 >>818
thx
>>812のコードは脳内破棄してくれ
指摘された部分を修正した
https://ideone.com/DoI3ww
同環境での測定結果が↓
214
213
214
freadだとバッファリングされるからその分遅いのかと勝手に思ってたらそんなところから間違ってたとはすまんw
thx
>>812のコードは脳内破棄してくれ
指摘された部分を修正した
https://ideone.com/DoI3ww
同環境での測定結果が↓
214
213
214
freadだとバッファリングされるからその分遅いのかと勝手に思ってたらそんなところから間違ってたとはすまんw
822デフォルトの名無しさん
2021/10/22(金) 00:41:05.61ID:bIdSm1HR BB抜きが有ってGG抜きが無いのは差別
823デフォルトの名無しさん
2021/10/22(金) 00:43:55.21ID:bIdSm1HR >>821
fread最強でFA
fread最強でFA
824デフォルトの名無しさん
2021/10/22(金) 01:17:58.50ID:JLUkeFzw freadのバイナリな
DMA効くのは
テキストはゴミ
DMA効くのは
テキストはゴミ
825デフォルトの名無しさん
2021/10/22(金) 02:55:23.69ID:ugOmuUc2 >>822
ジジ抜きもあるよ。
ジジ抜きはジョーカーを使わない。
適当な札を一枚抜いておいて組にならない札を最後まで持ってた奴が負け。
どれが負け札なのか最後までわからないというのがゲームの面白い部分。
ちなみに日本語でジジ抜きと呼ばれているゲームこそが Old maid (行き遅れ、お局様) の本来のルールで、
ペア (結婚相手) がないことを Old maid に喩えた命名になっている。
ジジ抜きもあるよ。
ジジ抜きはジョーカーを使わない。
適当な札を一枚抜いておいて組にならない札を最後まで持ってた奴が負け。
どれが負け札なのか最後までわからないというのがゲームの面白い部分。
ちなみに日本語でジジ抜きと呼ばれているゲームこそが Old maid (行き遅れ、お局様) の本来のルールで、
ペア (結婚相手) がないことを Old maid に喩えた命名になっている。
826デフォルトの名無しさん
2021/10/22(金) 05:43:15.83ID:I4IH0MDY C++20ちょっと書き始めたらvscodeのインテリセンスが何でもないところにエラーの波線出しまくってくる
827デフォルトの名無しさん
2021/10/22(金) 07:07:31.23ID:viI1I/mh DMAか、懐かしい
828デフォルトの名無しさん
2021/10/22(金) 12:50:15.03ID:xpSH/+fs >>826
どの環境でそうなる?
どの環境でそうなる?
829デフォルトの名無しさん
2021/10/22(金) 13:37:10.17ID:I4IH0MDY >>828
OS: Windows 8.1 (64 bit)
コンパイラ: MinGW GCC 11.1.0
文句を言ってくる拡張機能は多分普通の"Microsoft C/C++ 拡張機能"でコードの例としては
https://wandbox.org/permlink/Fcqjvfqt8rWVqren
こんな感じ
エラーは
operator<=>: 戻り値の型だけで識別される関数はオーバーロードできません
requires(1個目): こちらでは requires 句は許可されていません (テンプレート関数ではありません)
vec: エイリアス テンプレート "vec" の引数リストがありません
v: ';' が必要です
という感じ
まあエイリアスのやつはC++17でも言えるけど
OS: Windows 8.1 (64 bit)
コンパイラ: MinGW GCC 11.1.0
文句を言ってくる拡張機能は多分普通の"Microsoft C/C++ 拡張機能"でコードの例としては
https://wandbox.org/permlink/Fcqjvfqt8rWVqren
こんな感じ
エラーは
operator<=>: 戻り値の型だけで識別される関数はオーバーロードできません
requires(1個目): こちらでは requires 句は許可されていません (テンプレート関数ではありません)
vec: エイリアス テンプレート "vec" の引数リストがありません
v: ';' が必要です
という感じ
まあエイリアスのやつはC++17でも言えるけど
830デフォルトの名無しさん
2021/10/22(金) 23:23:13.68ID:Q/4+pM2R Pythonのリストのように不定型の配列を作るにはどうすればいいですか?
vector<int> a;
vector<double> b;
vector<vector<any>> hoge;
hoge.emplace_back(a);
hoge.emplace_back(b);
みたいなことをしたいですが、エラーになりました。
最終目的は、
void f(vector<vector<any>>, vector<vector<any>>)
のような不定型配列を複数引数に取る関数を作りたいです。
vector<int> a;
vector<double> b;
vector<vector<any>> hoge;
hoge.emplace_back(a);
hoge.emplace_back(b);
みたいなことをしたいですが、エラーになりました。
最終目的は、
void f(vector<vector<any>>, vector<vector<any>>)
のような不定型配列を複数引数に取る関数を作りたいです。
831デフォルトの名無しさん
2021/10/22(金) 23:45:34.05ID:vgFDGRgE std::variantつかうとか
832デフォルトの名無しさん
2021/10/23(土) 01:05:44.90ID:UQ/XjfNb >>830
出来るといえば出来るんだが、動的型っぽいことを C++ でやろうとすると煩雑だよ。
std::any は何でも格納できるが使うときには結局は元の型として取りださないといけない。
格納することが出来たとして、その後にどういう風に使うのかによってデザインの仕方がかわってくる。
出来るといえば出来るんだが、動的型っぽいことを C++ でやろうとすると煩雑だよ。
std::any は何でも格納できるが使うときには結局は元の型として取りださないといけない。
格納することが出来たとして、その後にどういう風に使うのかによってデザインの仕方がかわってくる。
833ハノン ◆QZaw55cn4c
2021/10/23(土) 01:33:33.73ID:0KDU0Kot >>830
C++17以降、へえ、こんなこともできるんだ… https://cpprefjp.github.io/reference/variant/variant.html
https://ideone.com/G8IPFR
>>831
ありがとうございます!
C++17以降、へえ、こんなこともできるんだ… https://cpprefjp.github.io/reference/variant/variant.html
https://ideone.com/G8IPFR
>>831
ありがとうございます!
835はちみつ餃子 ◆8X2XSCHEME
2021/10/23(土) 01:57:47.58ID:UQ/XjfNb >>834
クラスの設計段階で抽象クラスとの継承関係を作っておくだとかいった方法で多相にするのが
旧来からの方法で、それができるならそのほうがまともなものになると思うんだが、
そうは言ってもユーザーからは弄れない既存のクラスをどうしても使いたいということも無くはない。
根本的な部分をいじれないときに場当たり的にどうにかするよりは std::any や std::variant を使ったら
少しはマシかもねという程度の話で、あまり積極的に使うようなものではないというのが私の感触だな。
クラスの設計段階で抽象クラスとの継承関係を作っておくだとかいった方法で多相にするのが
旧来からの方法で、それができるならそのほうがまともなものになると思うんだが、
そうは言ってもユーザーからは弄れない既存のクラスをどうしても使いたいということも無くはない。
根本的な部分をいじれないときに場当たり的にどうにかするよりは std::any や std::variant を使ったら
少しはマシかもねという程度の話で、あまり積極的に使うようなものではないというのが私の感触だな。
836デフォルトの名無しさん
2021/10/23(土) 08:10:22.62ID:LycCK1PV void*よりはちょっとマシって程度の感覚だな
837デフォルトの名無しさん
2021/10/23(土) 10:04:52.59ID:rMqegMI3838デフォルトの名無しさん
2021/10/23(土) 10:05:50.17ID:bwy1yWHL void*「むかしはあんなに愛してくれたのに…」
839デフォルトの名無しさん
2021/10/23(土) 11:08:12.01ID:FGy8rv7m840デフォルトの名無しさん
2021/10/23(土) 11:40:12.00ID:KcnUiVki >>835
>>833じゃないけど>>833のdump()を例えば
template<class... Args>
void dump(const std::variant<Args...>& e) {
std::visit([](const auto& x){
std::cout << " " << x << std::endl;
}, e);
}
template<class V>
void dump(const std::vector<V>& v) {
for (const auto& e: v) {
dump(e);
}
}
みたいにするんなら
class Dumpable {
virtual void dump() = 0;
};
みたいな抽象クラス作って素直にArgsの各classが継承(実装)した方がいいと思うってこと?
>>833じゃないけど>>833のdump()を例えば
template<class... Args>
void dump(const std::variant<Args...>& e) {
std::visit([](const auto& x){
std::cout << " " << x << std::endl;
}, e);
}
template<class V>
void dump(const std::vector<V>& v) {
for (const auto& e: v) {
dump(e);
}
}
みたいにするんなら
class Dumpable {
virtual void dump() = 0;
};
みたいな抽象クラス作って素直にArgsの各classが継承(実装)した方がいいと思うってこと?
841はちみつ餃子 ◆8X2XSCHEME
2021/10/23(土) 13:07:50.50ID:UQ/XjfNb >>840
そう。 クラスごとに違う挙動が必要ならその違いはクラスの中に隠蔽されているべきで、
クラスを使う側で分岐するのはなんかちょっとあれだなという感じ。
型を調べて分岐するようなコードが嫌だから動的な型を調べる機能を意図的に入れなかった話は D&E にも書かれてる。
(最終的には typeid が導入されてしまったけど……)
ただそれは「型を追加したくなったら分岐も増やすのはめんどいしミスしそう」みたいな話なので、
十分に賢いユーティリティが標準で用意されている今ならそれほど強い動機でもないんだけどね。
そう。 クラスごとに違う挙動が必要ならその違いはクラスの中に隠蔽されているべきで、
クラスを使う側で分岐するのはなんかちょっとあれだなという感じ。
型を調べて分岐するようなコードが嫌だから動的な型を調べる機能を意図的に入れなかった話は D&E にも書かれてる。
(最終的には typeid が導入されてしまったけど……)
ただそれは「型を追加したくなったら分岐も増やすのはめんどいしミスしそう」みたいな話なので、
十分に賢いユーティリティが標準で用意されている今ならそれほど強い動機でもないんだけどね。
842デフォルトの名無しさん
2021/10/23(土) 13:12:23.67ID:quaWTEll C++はパラメトリック多相が無いからこういうのは面倒だよね。
とりあえずはstd::vector<std::function<std::string()>>に[v](){ return std::to_string(v); };
あたりを入れとくのが簡単かね。
conceptを「その制約を持つクラスの総称クラス」としてshared_ptrあたりで指定できるようになると便利なんだけどなぁ。
concept_shared_ptrとか用意してくれんかね。
とりあえずはstd::vector<std::function<std::string()>>に[v](){ return std::to_string(v); };
あたりを入れとくのが簡単かね。
conceptを「その制約を持つクラスの総称クラス」としてshared_ptrあたりで指定できるようになると便利なんだけどなぁ。
concept_shared_ptrとか用意してくれんかね。
843はちみつ餃子 ◆8X2XSCHEME
2021/10/23(土) 13:16:46.64ID:UQ/XjfNb >>837
any_cast での取り出しは「元の型」でなければならず、
string に変換可能な型であっても any_cast<string> は出来ない。
(やったら例外が飛ぶ)
最終的に文字列になると決めているなら文字列にしてから格納したほうがすっきりするんじゃないの。
any_cast での取り出しは「元の型」でなければならず、
string に変換可能な型であっても any_cast<string> は出来ない。
(やったら例外が飛ぶ)
最終的に文字列になると決めているなら文字列にしてから格納したほうがすっきりするんじゃないの。
844デフォルトの名無しさん
2021/10/23(土) 14:23:02.68ID:KcnUiVki >>841
まあそうだよね。ありがとう。
まあそうだよね。ありがとう。
845デフォルトの名無しさん
2021/10/24(日) 08:17:03.78ID:mo2+vXTQ846デフォルトの名無しさん
2021/10/24(日) 08:20:03.55ID:mo2+vXTQ847デフォルトの名無しさん
2021/10/24(日) 08:40:20.31ID:i4dOTOfz 上では例外安全にするとかしないとか言っていたような気がしたが少し主張が変わったのかな。
- 例外安全を求めるのは当然
- RAIIを使えば比較的例外安全を保証しやすい
- だからといってRAIIを使えば自動的に例外安全になるわけではない
結論としてはこんな感じだと思うが。
- 例外安全を求めるのは当然
- RAIIを使えば比較的例外安全を保証しやすい
- だからといってRAIIを使えば自動的に例外安全になるわけではない
結論としてはこんな感じだと思うが。
848デフォルトの名無しさん
2021/10/24(日) 08:41:27.07ID:7jz7Y9vl チェックして例外出さないと解放されないコード書いたのか…
849デフォルトの名無しさん
2021/10/24(日) 09:13:23.68ID:1SVJ9Wvp そりゃ例外安全もRAIIも魔法じゃないんだから使えば即安全になるというわけじゃないわな
「ちゃんと使えば」をすっ飛ばして>>845みたいなことを言い出すのも一種の思考停止だろうと思うわ
「ちゃんと使えば」をすっ飛ばして>>845みたいなことを言い出すのも一種の思考停止だろうと思うわ
850デフォルトの名無しさん
2021/10/24(日) 09:51:02.52ID:v4numFpL >>845
Barのデストラクタの責務は自分が確保したリソースをリークしないことだけだ
オブジェクトの外側でやってるスレッド間通信のことなんかBarは知らんし別に手当するだけの話
逆に聞くがRAIIを嫌がってBar* x = new Bar;とかにしたらなんか事態改善すんの?スレッド間通信を簡潔に書くための役に立つの?
Barのデストラクタの責務は自分が確保したリソースをリークしないことだけだ
オブジェクトの外側でやってるスレッド間通信のことなんかBarは知らんし別に手当するだけの話
逆に聞くがRAIIを嫌がってBar* x = new Bar;とかにしたらなんか事態改善すんの?スレッド間通信を簡潔に書くための役に立つの?
851デフォルトの名無しさん
2021/10/24(日) 10:24:44.80ID:P2kmr3bK そもそもRAIIが例外安全のためっていうイメージ全くないんだけど
リソースのお片付け(≒メモリリーク防止)が主目的ちゃうん?
リソースのお片付け(≒メモリリーク防止)が主目的ちゃうん?
852デフォルトの名無しさん
2021/10/24(日) 10:36:38.75ID:i4dOTOfz 例外が発生するとリソースを片付け損ねる場合があるってのが例外安全を欠く一番よくあるケースだと思うけど。
主目的がどうとかは別として。
主目的がどうとかは別として。
853デフォルトの名無しさん
2021/10/24(日) 10:45:51.44ID:NLtlOSxj >>845
例外を生じた場合でもXとなんらかの通信を行うべきなら
thread_connectionみたいなクラスを作ってデストラクタに整合性を保つためコードを書くのがいいかな
「アプリケーション固有の〜を送る」の部分にはそのオブジェクトのメソッド呼び出しにしておく
例外発生時にはデストラクタによってXスレッドに異常を通知してXスレッドが持つ状態の整合性を確保してもらう
Xに通知するのが単なる終了通知なら(成否を区別して処理しなくていいなら)全部デストラクタでいいかもね
例外を生じた場合でもXとなんらかの通信を行うべきなら
thread_connectionみたいなクラスを作ってデストラクタに整合性を保つためコードを書くのがいいかな
「アプリケーション固有の〜を送る」の部分にはそのオブジェクトのメソッド呼び出しにしておく
例外発生時にはデストラクタによってXスレッドに異常を通知してXスレッドが持つ状態の整合性を確保してもらう
Xに通知するのが単なる終了通知なら(成否を区別して処理しなくていいなら)全部デストラクタでいいかもね
854デフォルトの名無しさん
2021/10/24(日) 10:47:45.55ID:KyFc3YJo 結局コードがないのでまた空中戦になってますね
855デフォルトの名無しさん
2021/10/24(日) 11:38:44.49ID:IQSwOnqn 例外でデストラクタ呼ばないケースなんてあるんですか?
プログラム自体が止まるのは別として
プログラム自体が止まるのは別として
856デフォルトの名無しさん
2021/10/24(日) 12:07:45.68ID:KyFc3YJo リマインダー>>731
857デフォルトの名無しさん
2021/10/24(日) 14:38:53.43ID:KyFc3YJo これg++ 9.3だとstd::endlがなぜかconst variant<>と思われてエラーになってるみたいなんだけど、なぜ?
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl;
return 0;
}
https://godbolt.org/z/dbodW3xfG
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl;
return 0;
}
https://godbolt.org/z/dbodW3xfG
858ハノン ◆QZaw55cn4c
2021/10/24(日) 15:13:35.43ID:rOnHPdOM >>838
「「最初から void * な実体」は作らない」「void (*)(void *, ...) くらいまでがせいぜいだ」というように努めていた私は愛し方が足りなかったのでしょうか?
最近の愛し方:https://mevius.5ch.net/test/read.cgi/tech/1624028577/305
「「最初から void * な実体」は作らない」「void (*)(void *, ...) くらいまでがせいぜいだ」というように努めていた私は愛し方が足りなかったのでしょうか?
最近の愛し方:https://mevius.5ch.net/test/read.cgi/tech/1624028577/305
859はちみつ餃子 ◆8X2XSCHEME
2021/10/24(日) 18:37:46.86ID:SzIAMYLD >>857
std::endl は関数テンプレートなので型と比較しようとするとインスタンス化に失敗するというエラーだと思う。
(std::endl を普通に使うときは左辺の型を利用して推論される。)
型を明示して渡せば variant との比較に失敗して通常の改行として解釈してくれる。
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << static_cast<std::ostream&(*)(std::ostream&)>(std::endl);
return 0;
}
std::endl は関数テンプレートなので型と比較しようとするとインスタンス化に失敗するというエラーだと思う。
(std::endl を普通に使うときは左辺の型を利用して推論される。)
型を明示して渡せば variant との比較に失敗して通常の改行として解釈してくれる。
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << static_cast<std::ostream&(*)(std::ostream&)>(std::endl);
return 0;
}
860デフォルトの名無しさん
2021/10/24(日) 19:35:48.44ID:KyFc3YJo >>859
う〜ん、よく分かりませんね。確かに勝手にendlは[with _CharT = char; _Traits = std::char_traits<char>]なbasic_ostreamを
引数にとって返すと想定しちゃってましたが、その時点でインスタンス化しようとしてエラー出す理由が分からない・・・
例えばテンプレート引数を直指定しても
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl<char>; // ここが違う
return 0;
}
同様にエラーのままでした。castしたときだけなぜ判定失敗してくれるのかもう少し考えてみます。
ありがとうございました。
う〜ん、よく分かりませんね。確かに勝手にendlは[with _CharT = char; _Traits = std::char_traits<char>]なbasic_ostreamを
引数にとって返すと想定しちゃってましたが、その時点でインスタンス化しようとしてエラー出す理由が分からない・・・
例えばテンプレート引数を直指定しても
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl<char>; // ここが違う
return 0;
}
同様にエラーのままでした。castしたときだけなぜ判定失敗してくれるのかもう少し考えてみます。
ありがとうございました。
861はちみつ餃子 ◆8X2XSCHEME
2021/10/25(月) 00:43:36.43ID:dRHq7DJG >>860
左辺が曖昧だからかもしれない。
左辺の型を std::ostream で固定すれば通る。
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
std::ostream& operator<<(std::ostream& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl<char>;
return 0;
}
でもこのとき型変数 C は不要だなと思って class C を削るとエラーになるんだよな。
なんだかよくわかんないね。
左辺が曖昧だからかもしれない。
左辺の型を std::ostream で固定すれば通る。
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
std::ostream& operator<<(std::ostream& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl<char>;
return 0;
}
でもこのとき型変数 C は不要だなと思って class C を削るとエラーになるんだよな。
なんだかよくわかんないね。
862デフォルトの名無しさん
2021/10/25(月) 02:18:03.94ID:LmZJdmU+ >>861
度々ありがとうございます。再現確認したところ、確かに余計なテンプレート引数が1つあるだけでこのエラーが出ないみたいですね。
試しに元のコード(>>857)に余計なパラメータを1つ入れるだけでも通りました。
#include <variant>
#include <iostream>
using namespace std;
template<class T, class C, class... Args> // ダミーパラメータT追加
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl;
return 0;
}
ほんとによく分かりませんね。
castの件は第2引数のvがテンプレート関数でなければ弾けるということのような気がします。
https://onlinegdb.com/ol3BYChIx
度々ありがとうございます。再現確認したところ、確かに余計なテンプレート引数が1つあるだけでこのエラーが出ないみたいですね。
試しに元のコード(>>857)に余計なパラメータを1つ入れるだけでも通りました。
#include <variant>
#include <iostream>
using namespace std;
template<class T, class C, class... Args> // ダミーパラメータT追加
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
cout << endl;
return 0;
}
ほんとによく分かりませんね。
castの件は第2引数のvがテンプレート関数でなければ弾けるということのような気がします。
https://onlinegdb.com/ol3BYChIx
863デフォルトの名無しさん
2021/10/25(月) 02:19:56.83ID:LmZJdmU+ 最後のコードは右上の設定ボタンから -std=c++17 を追加することで実行できます。
864デフォルトの名無しさん
2021/10/25(月) 13:57:01.70ID:p1HT8A4i iostreamのシフト演算子オーバーロードは文句を言われてるがrangesのoperator|のオーバーロードはどうなんですかね
865はちみつ餃子 ◆8X2XSCHEME
2021/10/25(月) 14:01:06.87ID:dRHq7DJG 感覚的にはまあ順当だろうと思う。
日付やパスで / を使うのに比べればよっぽど……。
日付やパスで / を使うのに比べればよっぽど……。
866デフォルトの名無しさん
2021/10/25(月) 15:38:37.13ID:x4U5y7kU 組み込みの意味を持たないオーバーロード専用演算子があれば良かったのにな
用意しておかなかったのはC++の初期デザインの失敗だったと思う
用意しておかなかったのはC++の初期デザインの失敗だったと思う
867デフォルトの名無しさん
2021/10/25(月) 16:09:42.75ID:SLeimCOK 意味を持たない演算子が意図せず呼ばれてしまうくらいならコンパイルエラーになったほうがマシでは
868はちみつ餃子 ◆8X2XSCHEME
2021/10/25(月) 17:28:55.78ID:dRHq7DJG ところで Haskell で一定の記号の組み合わせは何でも新しい演算子として定義できる仕組みがある。
!#$%&*+./<=>? あたりとその他 Unicode 内いくらかも含めた組み合わせで演算子を作っていい。
優先順位も決められるし左結合か右結合かも決められる。
事実上無制限に違う字面の演算子を作れるんだよ。
<?+> とか #-. とか <<-~ みたいな演算子が実際に使われてるわけ。
こういう極端なのはさすがにあまりうらやましくはないよな……。
>>866
かといって有限の演算子をある程度に多く用意したところでオーバーロードを許すなら
どこかで全然違う意味で使われることもあるのは避けようがないし、
C++ くらいにスッパリと諦めるのもそれはそれで思い切りが良くて良いと思う。
!#$%&*+./<=>? あたりとその他 Unicode 内いくらかも含めた組み合わせで演算子を作っていい。
優先順位も決められるし左結合か右結合かも決められる。
事実上無制限に違う字面の演算子を作れるんだよ。
<?+> とか #-. とか <<-~ みたいな演算子が実際に使われてるわけ。
こういう極端なのはさすがにあまりうらやましくはないよな……。
>>866
かといって有限の演算子をある程度に多く用意したところでオーバーロードを許すなら
どこかで全然違う意味で使われることもあるのは避けようがないし、
C++ くらいにスッパリと諦めるのもそれはそれで思い切りが良くて良いと思う。
869デフォルトの名無しさん
2021/10/25(月) 17:51:03.08ID:s1VnbLSn 演算子ってのはwellknownだからこそ意味があると思うんだけどな
演算子のオーバーロードもその“意味”から大きく逸脱しないことを求めていたと思うし
意味を持たないオーバーロード専用演算子ってのは
プログラマーによって意味が真逆になりかねないから危険だと思う
そんなことするぐらいなら普通に名前を付けて関数定義したほうがマシに思える
演算子のオーバーロードもその“意味”から大きく逸脱しないことを求めていたと思うし
意味を持たないオーバーロード専用演算子ってのは
プログラマーによって意味が真逆になりかねないから危険だと思う
そんなことするぐらいなら普通に名前を付けて関数定義したほうがマシに思える
870デフォルトの名無しさん
2021/10/25(月) 17:56:20.95ID:5fKOgArh そこら中訳わかんない記号だらけのソースとか悪夢でしかないなw
871デフォルトの名無しさん
2021/10/25(月) 18:04:59.44ID:LmZJdmU+ >>857の原因判明しました。
同一の問題がstackoverflowで解決されていたのでリンクだけ貼っておきます。
https://stackoverflow.com/questions/52845621/cant-stream-stdendl-with-overloaded-operator-for-stdvariant
上記に従った対策コードは以下のとおりです。
https://godbolt.org/z/8e9o3MnaG
同一の問題がstackoverflowで解決されていたのでリンクだけ貼っておきます。
https://stackoverflow.com/questions/52845621/cant-stream-stdendl-with-overloaded-operator-for-stdvariant
上記に従った対策コードは以下のとおりです。
https://godbolt.org/z/8e9o3MnaG
872デフォルトの名無しさん
2021/10/25(月) 20:01:58.87ID:VZsrHh6g >>866
リザーブの演算子持っとけって言いたいんだろうけどこう言う奴はいくつ持ってても足りねーとか言うからw
リザーブの演算子持っとけって言いたいんだろうけどこう言う奴はいくつ持ってても足りねーとか言うからw
873デフォルトの名無しさん
2021/10/25(月) 21:34:55.28ID:3IW01+t9 演算子オーバーロードって自分で書くにはいいけど他人のコードを読むのが地獄だな。
874デフォルトの名無しさん
2021/10/25(月) 21:35:04.23ID:EqTxifVC while (fread(&x, sizeof(double), 1, fin) > 0) {
fprintf(fout, "%5.4f\n", x);
}
こんな風に書くとコベリティ君がfreadは読み込んだバイト数を返すが使っていませんみたいなこと言い出すんだが
は?使ってますけど?みたいな気持ちしかないんだけど
何を求められてるんだろうか。
fprintf(fout, "%5.4f\n", x);
}
こんな風に書くとコベリティ君がfreadは読み込んだバイト数を返すが使っていませんみたいなこと言い出すんだが
は?使ってますけど?みたいな気持ちしかないんだけど
何を求められてるんだろうか。
875デフォルトの名無しさん
2021/10/26(火) 06:12:19.30ID:lDQyydUS >>874
そんなのシノプシスに聞けよ…
そんなのシノプシスに聞けよ…
876デフォルトの名無しさん
2021/10/26(火) 06:48:54.44ID:ch+2e+/f >>870
昔のAPLとかかw
昔のAPLとかかw
877デフォルトの名無しさん
2021/10/26(火) 08:08:42.05ID:a/qQal0X 演算子に限らず、ある関数を特定の名前空間の内部だけ使えるように限定できたっけ?
「あるスコープだけこういう使い方」ならまだ混乱も少ないかね。
「あるスコープだけこういう使い方」ならまだ混乱も少ないかね。
878デフォルトの名無しさん
2021/10/26(火) 08:14:06.41ID:FOkaXEb/ ん? それこそが名前空間の可視性制御だろ
879デフォルトの名無しさん
2021/10/26(火) 08:14:48.16ID:X4knYEql 関数内で構造体を定義し、その中でstatic関数を定義する
880デフォルトの名無しさん
2021/10/26(火) 08:15:27.77ID:X4knYEql あ、違った
class内のprivate関数でいいんじゃね
class内のprivate関数でいいんじゃね
881デフォルトの名無しさん
2021/10/26(火) 08:27:02.14ID:cqUp+YH+882デフォルトの名無しさん
2021/10/26(火) 09:22:33.47ID:tIXOLnPL883デフォルトの名無しさん
2021/10/26(火) 10:05:37.17ID:I5hwU/3x >>874
fprintfはええんか?
fprintfはええんか?
884デフォルトの名無しさん
2021/10/26(火) 10:21:21.31ID:g/XkL0k7 niebloidの出番じゃないの?演算子オーバーロードには使えないが
885デフォルトの名無しさん
2021/10/26(火) 12:31:52.75ID:E+rw0Wy/886デフォルトの名無しさん
2021/10/26(火) 12:54:35.40ID:FaeDWsHu 今日もまた単発IDの曖昧発言onlyですね
887ハノン ◆QZaw55cn4c
2021/10/31(日) 10:43:09.43ID:hT9enBIH テステス
888デフォルトの名無しさん
2021/11/01(月) 17:04:38.20ID:uZUsIwlp std::function を引数にとる関数を作ってるんだが、参照で渡すのとコピーで渡すのでどのように動作が変わるかわからない
参照で渡して良いですか
参照で渡して良いですか
889デフォルトの名無しさん
2021/11/01(月) 17:28:34.89ID:2TKPTRzu std::funcて中身は関数ポインタ―でしょ
コピーで済むものを参照で渡す必要はそもそもないんじゃないの
受け取り先で書き換えて返すなら別だけど
コピーで済むものを参照で渡す必要はそもそもないんじゃないの
受け取り先で書き換えて返すなら別だけど
890はちみつ餃子 ◆8X2XSCHEME
2021/11/01(月) 17:29:06.34ID:w5vOXkrp >>888
「引数にとる」というのは実引数の型も std::function 型という意味?
「引数にとる」というのは実引数の型も std::function 型という意味?
891デフォルトの名無しさん
2021/11/01(月) 17:41:35.71ID:ja4QDiEt892デフォルトの名無しさん
2021/11/01(月) 17:42:17.47ID:P2kjdACs コピーだろー
893デフォルトの名無しさん
2021/11/01(月) 17:54:17.61ID:uZUsIwlp >>890
関数を想定しています
関数を想定しています
894はちみつ餃子 ◆8X2XSCHEME
2021/11/01(月) 17:58:12.22ID:w5vOXkrp >>893
仮引数の側を std::function の参照にしたところで、実引数の側が std::function ではないときは
変換して一時オブジェクトを作ってからその参照をとる形になるんだよ。
これは std::function に限らない一般原則。
どちらにしても新しいオブジェクトを構築するので参照にする意味がない。
仮引数の側を std::function の参照にしたところで、実引数の側が std::function ではないときは
変換して一時オブジェクトを作ってからその参照をとる形になるんだよ。
これは std::function に限らない一般原則。
どちらにしても新しいオブジェクトを構築するので参照にする意味がない。
895デフォルトの名無しさん
2021/11/01(月) 18:35:36.43ID:XqzqlHR8 クラスのメンバーにstd::functionをいくつか用意しておいて、
条件によりどれかのstd::functionを引数に取るprivateなメンバ関数とかなら参照にする意味はあるかもしれないw
条件によりどれかのstd::functionを引数に取るprivateなメンバ関数とかなら参照にする意味はあるかもしれないw
896デフォルトの名無しさん
2021/11/01(月) 19:28:38.40ID:Qg2QcgLf この流れで質問をば。
std::functionだと単体のR opetator()(Arg...)しか指定できないけど、複数のメソッドを指定できるように拡張するにはどうしたらいいかしらん?
継承じゃなくてtype erasure を使ったgeneral smart pointerとでもいうようなやつが欲しいんだけど、どこかに実装ないかなぁ。
std::functionだと単体のR opetator()(Arg...)しか指定できないけど、複数のメソッドを指定できるように拡張するにはどうしたらいいかしらん?
継承じゃなくてtype erasure を使ったgeneral smart pointerとでもいうようなやつが欲しいんだけど、どこかに実装ないかなぁ。
897デフォルトの名無しさん
2021/11/01(月) 19:49:46.26ID:Iw+wFADq anyの使いどころ?
898896
2021/11/01(月) 20:35:42.39ID:0sJcc+2w anyだとメソッドを呼び出せないから機能が足りないですな。
メソッド呼び出しできるインターフェイス付きanyみたいな感じ。
用途は「指定したメソッドがあれば継承関係無しでブチ込める親クラスみたいなanyみたいなshared_ptr」だけど。
メソッド呼び出しできるインターフェイス付きanyみたいな感じ。
用途は「指定したメソッドがあれば継承関係無しでブチ込める親クラスみたいなanyみたいなshared_ptr」だけど。
899デフォルトの名無しさん
2021/11/01(月) 20:39:54.69ID:ja4QDiEt 理解できてないけど普通のテンプレート引数を持つ関数じゃいかんの?
900896
2021/11/01(月) 21:35:17.71ID:0sJcc+2w Haskellの型タイプというのがイメージに近いか。
具体例をだしてみると、
class A { public: string test1() { return string("A1"); }; string test2() { return string("A2"); }; };
class B { public: string test1() { return string("B1"); }; string test2() { return string("B2"); }; };
vector<generic_ptr<string test()>>c;
c.push_back(make_shared<A>());
c.push_back(make_shared<B>());
c[0]->test1(); // A1
c[1]->test1(); // B1
c[0]->test2(); // A2
c[1]->test2(); // B2
みたいに、anyみたいに雑多なオブジェクトをブチ込むけど、
anyとは違ってそのまま共通メソッドを呼び出せるようにする、
というのが狙いね。
具体例をだしてみると、
class A { public: string test1() { return string("A1"); }; string test2() { return string("A2"); }; };
class B { public: string test1() { return string("B1"); }; string test2() { return string("B2"); }; };
vector<generic_ptr<string test()>>c;
c.push_back(make_shared<A>());
c.push_back(make_shared<B>());
c[0]->test1(); // A1
c[1]->test1(); // B1
c[0]->test2(); // A2
c[1]->test2(); // B2
みたいに、anyみたいに雑多なオブジェクトをブチ込むけど、
anyとは違ってそのまま共通メソッドを呼び出せるようにする、
というのが狙いね。
901デフォルトの名無しさん
2021/11/01(月) 22:33:44.83ID:JtJuMIHt902896
2021/11/02(火) 00:28:12.27ID:F29rpsLU >901
ありがとう。こういうのもあるのね
……でも BOOST_TYPE_ERASURE_MEMBER を使ったコンセプトがWandboxで上手く動かないなぁ。
もうちょっと試してみるか。
ありがとう。こういうのもあるのね
……でも BOOST_TYPE_ERASURE_MEMBER を使ったコンセプトがWandboxで上手く動かないなぁ。
もうちょっと試してみるか。
903デフォルトの名無しさん
2021/11/02(火) 10:51:55.89ID:7a5iqwfV std::thread で作られるスレッドって
スタックサイズはデフォルトいくつなん?
変更とかできるん?
スタックサイズはデフォルトいくつなん?
変更とかできるん?
904デフォルトの名無しさん
2021/11/02(火) 10:59:21.25ID:oKrr57AH >>903
スタックなんて概念がないのに制御できるわけがない
スタックなんて概念がないのに制御できるわけがない
905デフォルトの名無しさん
2021/11/02(火) 11:48:47.80ID:LR6fq+wY linuxならulimit -sかpthread_attr_setstacksizeで設定できる
ただ確保されるのは仮想メモリなので現実的にはその設定あんまり使い所がない
そしてC++とか関係ない
ただ確保されるのは仮想メモリなので現実的にはその設定あんまり使い所がない
そしてC++とか関係ない
906デフォルトの名無しさん
2021/11/02(火) 13:09:21.89ID:TehqQXLJ stdよりposixのほうが洗練されてるよな
907デフォルトの名無しさん
2021/11/02(火) 17:28:47.39ID:LR6fq+wY 何いってんの?この人
908デフォルトの名無しさん
2021/11/02(火) 19:04:22.54ID:TehqQXLJ 意味わかんなくてpthread使ってんなら相当頭悪い
909デフォルトの名無しさん
2021/11/02(火) 19:13:49.36ID:U4IKz2Wy むだに喧嘩すんなよ
910デフォルトの名無しさん
2021/11/02(火) 19:28:12.57ID:LR6fq+wY 比較対象がおかしいんだからしょうがなくね?w
911デフォルトの名無しさん
2021/11/05(金) 00:18:59.36ID:2vTbLoUN 基底クラスに定数持たせるけど値は継承先で決めたい。
例)Carクラスには計算に使うが変更はしない定数 weight hight width があり、それは継承した車種クラス毎に異なる、など。
下記でコンパイル通るようですが、定数増えると見づらく、もっとスマートなやり方あったらご教授願いたく。
class Car
{
protected:
const double weight, height, width;
public:
Car(double w, double h, double wd)
: weight(w)
, height(h)
, width(wd)
{}
};
class CarA : public Car
{
CarA() : Car(1000.0, 1.8, 1,8) {}
};
例)Carクラスには計算に使うが変更はしない定数 weight hight width があり、それは継承した車種クラス毎に異なる、など。
下記でコンパイル通るようですが、定数増えると見づらく、もっとスマートなやり方あったらご教授願いたく。
class Car
{
protected:
const double weight, height, width;
public:
Car(double w, double h, double wd)
: weight(w)
, height(h)
, width(wd)
{}
};
class CarA : public Car
{
CarA() : Car(1000.0, 1.8, 1,8) {}
};
912デフォルトの名無しさん
2021/11/05(金) 00:22:58.93ID:O1PLiy99 別に普通だと思うけどどの辺が見づらいと思うんだ?
913はちみつ餃子 ◆8X2XSCHEME
2021/11/05(金) 01:26:19.60ID:8QrXrM3i 値が const であるだけでなく static であって欲しいという意図なんじゃないかと想像する。
914デフォルトの名無しさん
2021/11/05(金) 01:29:07.53ID:zGuhJhpK クラステンプレート化すればいいじゃない
template<double W, double H, double WD>
template<double W, double H, double WD>
915デフォルトの名無しさん
2021/11/05(金) 01:41:20.30ID:gd3zcTPm doubleってテンプレート引数OKになったの?
917デフォルトの名無しさん
2021/11/05(金) 02:25:46.30ID:Xs8oV2Az C++20では普通に使えるかもだけど、引数に名前を付ける風のトリックがあるらしい
https://www.fluentcpp.com/2018/12/14/named-arguments-cpp/
https://www.fluentcpp.com/2018/12/14/named-arguments-cpp/
918デフォルトの名無しさん
2021/11/05(金) 05:55:16.82ID:caWVwyr0919デフォルトの名無しさん
2021/11/05(金) 06:25:31.61ID:8h2e+y9J920デフォルトの名無しさん
2021/11/05(金) 07:38:38.22ID:gd3zcTPm C++20で指示付き初期化が出来るようなので、もしC++20が使えるなら定数を構造体にまとめたらいいかも
https://cpprefjp.github.io/lang/cpp20/designated_initialization.html
https://cpprefjp.github.io/lang/cpp20/designated_initialization.html
921デフォルトの名無しさん
2021/11/05(金) 08:22:45.14ID:OHT8JXtH922デフォルトの名無しさん
2021/11/05(金) 12:38:49.71ID:gSSLx8YQ923デフォルトの名無しさん
2021/11/05(金) 13:46:37.13ID:Xs8oV2Az >>920
C++20で使えるのそれそれ。gccでは元々使えるけど...
C++20で使えるのそれそれ。gccでは元々使えるけど...
924はちみつ餃子 ◆8X2XSCHEME
2021/11/05(金) 13:57:04.43ID:8QrXrM3i >>923
C (C99 以降) には有るからついでに C++ でも使えるようにするのは gcc 的にはたいした手間でもなかったんだろうと思う。
C (C99 以降) には有るからついでに C++ でも使えるようにするのは gcc 的にはたいした手間でもなかったんだろうと思う。
925はちみつ餃子 ◆8X2XSCHEME
2021/11/05(金) 14:01:00.76ID:8QrXrM3i ところで C の designated initializer では配列要素を指示することも出来るんだけど、 C++20 にはこれは入らなかったんだね。
↓ こういうの。
const char *foo[5] = {
[2]="bar"
};
↓ こういうの。
const char *foo[5] = {
[2]="bar"
};
926デフォルトの名無しさん
2021/11/05(金) 14:04:47.27ID:XqgFcDRs c++17以前でも引数を構造体にまとめれば{}で区切って記述できるようになるから多少マシにはなるよね
IntelliSenseが効きにくくなるのが欠点だけど
IntelliSenseが効きにくくなるのが欠点だけど
927デフォルトの名無しさん
2021/11/05(金) 14:10:59.42ID:TiWO+rcp >>922
君は何を言っているんだい?
君は何を言っているんだい?
928デフォルトの名無しさん
2021/11/05(金) 14:27:51.72ID:7LuUsMxr そのCの記述素晴らしいよね
C++的でないのはわかるがどうせ初期化時でしか使わんのだしとっとと入れるべきだった
C++的でないのはわかるがどうせ初期化時でしか使わんのだしとっとと入れるべきだった
929デフォルトの名無しさん
2021/11/05(金) 16:10:31.37ID:gd3zcTPm >>925 ラムダ式のキャプチャと競合するためと書いてるね
930デフォルトの名無しさん
2021/11/07(日) 16:47:32.00ID:qipzvPRM https://ideone.com/d05dJ9
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
#define MAX_SIZE 100
template <class T>
// template <class T, size_t C=MAX_SIZE>
class SizeLimitedAllocator {
public:
typedef T value_type;
using traits = allocator_traits<allocator<T>>;
T *allocate(size_t n) {
if (n > MAX_SIZE) throw bad_alloc();
// if (n > C) throw bad_alloc();
return traits::allocate(_allocator, n);
}
void deallocate(T *p, size_t n) {
traits::deallocate(_allocator, p, n);
}
private:
allocator<T> _allocator;
};
int main()
{
vector<char,SizeLimitedAllocator<char>> vec(MAX_SIZE);
try { vec.resize(MAX_SIZE+1); }
catch (bad_alloc& e) { cerr << e.what() << endl; }
return 0;
}
このコードをコメント側に変更してコンパイルするとこけるんだけど、なんで?
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
#define MAX_SIZE 100
template <class T>
// template <class T, size_t C=MAX_SIZE>
class SizeLimitedAllocator {
public:
typedef T value_type;
using traits = allocator_traits<allocator<T>>;
T *allocate(size_t n) {
if (n > MAX_SIZE) throw bad_alloc();
// if (n > C) throw bad_alloc();
return traits::allocate(_allocator, n);
}
void deallocate(T *p, size_t n) {
traits::deallocate(_allocator, p, n);
}
private:
allocator<T> _allocator;
};
int main()
{
vector<char,SizeLimitedAllocator<char>> vec(MAX_SIZE);
try { vec.resize(MAX_SIZE+1); }
catch (bad_alloc& e) { cerr << e.what() << endl; }
return 0;
}
このコードをコメント側に変更してコンパイルするとこけるんだけど、なんで?
931デフォルトの名無しさん
2021/11/07(日) 17:51:19.26ID:ISiN+sDp >>928
aggregate限定だね
aggregate限定だね
932デフォルトの名無しさん
2021/11/07(日) 17:56:01.13ID:Mdbpk+F7 >>930
https://en.cppreference.com/w/cpp/named_req/Allocator#cite_note-2
> rebind is only optional (provided by std::allocator_traits) if this allocator is a template of the form SomeAllocator<T, Args>, where Args is zero or more additional template type parameters.
これですかね?
カスタムアロケータ自分で定義したことないのでじゃあどうすればいいかは分かりませんが……
https://en.cppreference.com/w/cpp/named_req/Allocator#cite_note-2
> rebind is only optional (provided by std::allocator_traits) if this allocator is a template of the form SomeAllocator<T, Args>, where Args is zero or more additional template type parameters.
これですかね?
カスタムアロケータ自分で定義したことないのでじゃあどうすればいいかは分かりませんが……
933デフォルトの名無しさん
2021/11/07(日) 18:53:11.25ID:Qwz9shRh rebind_allocが悪さしてたりして
934デフォルトの名無しさん
2021/11/07(日) 19:23:12.01ID:A2QjBZsT >>930
SizeLimitedAllocatorの定義にこれ追加すればいいよ
template<typename U>
struct rebind {using other = SizeLimitedAllocator<U,C>;};
SizeLimitedAllocatorの定義にこれ追加すればいいよ
template<typename U>
struct rebind {using other = SizeLimitedAllocator<U,C>;};
935デフォルトの名無しさん
2021/11/08(月) 00:05:22.17ID:dWDs4ee0 https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/ptr_traits.h#L62-L69
この辺の定義にある
定数値という型でないものがテンプレート引数に入ったため、__replace_first_argの下側の定義が使われず
上側の定義が使用されtypeも入らず
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/alloc_traits.h#L80
でrebindできなくなったことが原因でした。
これを回避するためには、>>934のように
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/alloc_traits.h#L51-L57
この下の定義に当てはまるrebind<U>::otherを定義しておく必要があるようです。
定数値でなく型がテンプレート引数に追加された場合は、otherの定義は必要ありませんでした。
この辺の定義にある
定数値という型でないものがテンプレート引数に入ったため、__replace_first_argの下側の定義が使われず
上側の定義が使用されtypeも入らず
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/alloc_traits.h#L80
でrebindできなくなったことが原因でした。
これを回避するためには、>>934のように
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/alloc_traits.h#L51-L57
この下の定義に当てはまるrebind<U>::otherを定義しておく必要があるようです。
定数値でなく型がテンプレート引数に追加された場合は、otherの定義は必要ありませんでした。
936デフォルトの名無しさん
2021/11/10(水) 17:04:45.91ID:9a0GsOuO グーグルテストのASSERTの片辺に期待値をマジックナンバーじゃなくマクロ定数で指定すると赤線引いて来やがるんだけどVSだけ?
ビルドは通るしテストもできるから全く問題ないんだけどうぜー
ビルドは通るしテストもできるから全く問題ないんだけどうぜー
937デフォルトの名無しさん
2021/11/10(水) 20:17:21.11ID:MFJzciMu warningの種類ごとにon/offしたくなる
938デフォルトの名無しさん
2021/11/11(木) 00:05:50.61ID:QjSth2/F 大体のコンパイラはそういう#pragma持ってるだろ
MSVCなら#pragma warning
GCCなら#pragma GCC diagnostic
MSVCなら#pragma warning
GCCなら#pragma GCC diagnostic
939デフォルトの名無しさん
2021/11/12(金) 12:50:12.26ID:DicJ24/v 改行コードとかタブコードとかが含まれた文字列を
\nとか\tとかにエスケープしてくれる関数ってある?
\nとか\tとかにエスケープしてくれる関数ってある?
940デフォルトの名無しさん
2021/11/12(金) 12:53:25.82ID:/M/iq88E 速度気にしないなら正規表現で
941デフォルトの名無しさん
2021/11/12(金) 13:28:00.04ID:INEjO2I3 quote?
942デフォルトの名無しさん
2021/11/12(金) 14:16:51.83ID:IjXGHyKg std::replaceは?
sjisだとまずいかも
sjisだとまずいかも
943デフォルトの名無しさん
2021/11/12(金) 20:51:39.15ID:4Xte/kSq 文字コード周りはカオスすぎて標準も手に負えず匙投げたからライブラリ使った方がいいよ
944デフォルトの名無しさん
2021/11/12(金) 23:22:09.10ID:qmhW9zZv >>939
C/C++の場合、1文字単位での文字列処理が得意なので、自作するのも簡単。
0x09 や 0x0a は、SJISやUtf8などの多バイト文字の中には含まれて無いから、
なおさら。
例えば、std::stringでも、新しい文字列変数dstを作って、srcの文字列
から1バイト単位で読み取って、dstに1文字ずつ末尾追加していけばいい。
C/C++の場合、1文字単位での文字列処理が得意なので、自作するのも簡単。
0x09 や 0x0a は、SJISやUtf8などの多バイト文字の中には含まれて無いから、
なおさら。
例えば、std::stringでも、新しい文字列変数dstを作って、srcの文字列
から1バイト単位で読み取って、dstに1文字ずつ末尾追加していけばいい。
945デフォルトの名無しさん
2021/11/12(金) 23:28:15.13ID:qmhW9zZv >>944
[具体例]
MFCのCStringなら、以下のようにするだけでよい:
CString src = "元の文字列";
CString dst; // 変換後の文字列を入れる変数。
const char *ptr = (const char *)src; // CString の 0 終端文字列の先頭アドレスを取得するための変換関数を呼び出している。
while ( *ptr != 0 ) {
if ( *ptr == 0x0a ) {
dst += "\\n";
}
else if ( *ptr == 0x09 ) {
dst += "\\t";
}
else {
dst += *ptr;
}
ptr++;
}
[具体例]
MFCのCStringなら、以下のようにするだけでよい:
CString src = "元の文字列";
CString dst; // 変換後の文字列を入れる変数。
const char *ptr = (const char *)src; // CString の 0 終端文字列の先頭アドレスを取得するための変換関数を呼び出している。
while ( *ptr != 0 ) {
if ( *ptr == 0x0a ) {
dst += "\\n";
}
else if ( *ptr == 0x09 ) {
dst += "\\t";
}
else {
dst += *ptr;
}
ptr++;
}
946デフォルトの名無しさん
2021/11/12(金) 23:33:56.40ID:qmhW9zZv >>945
[補足]
このプログラムは、1バイトずつ読み取っているが、文字符合は、このままでも、
無修正で ASCIIだけでなく、SJISやUTF8やEUCにも対応している。
後者のような符合では、例えば、SJISの"あ"の文字だと、1文字単位ではなく、
1バイトずつ処理され、2回ループが回るが、問題ない。
UTF8だと3回ループされる。
つまり、このプログラムでは、SJISの1文字は、2文字のように
UTF8の"あ"の文字は、3文字のように処理される。
しかし、それでも結果的には問題ない。
なぜなら、0x0aや0x09は、多バイト文字の中には含まれてないから。
ただし、SJISの場合、\ の文字コードが含まれているので注意が必要ではあるが、
今回は問題ない。
[補足]
このプログラムは、1バイトずつ読み取っているが、文字符合は、このままでも、
無修正で ASCIIだけでなく、SJISやUTF8やEUCにも対応している。
後者のような符合では、例えば、SJISの"あ"の文字だと、1文字単位ではなく、
1バイトずつ処理され、2回ループが回るが、問題ない。
UTF8だと3回ループされる。
つまり、このプログラムでは、SJISの1文字は、2文字のように
UTF8の"あ"の文字は、3文字のように処理される。
しかし、それでも結果的には問題ない。
なぜなら、0x0aや0x09は、多バイト文字の中には含まれてないから。
ただし、SJISの場合、\ の文字コードが含まれているので注意が必要ではあるが、
今回は問題ない。
947デフォルトの名無しさん
2021/11/12(金) 23:39:04.51ID:qmhW9zZv >>946
[補足2]
char は、C言語が登場した時には、「文字」の意味であったが、
今は少なくとも C言語では文字の意味はほぼなく、1バイト(8BIT)の意味である。
そして、C言語でcharが1バイト(8BIT)で無い処理系は、主流ではないので無視
してよい。
Javaなどでは、charが 必ず16BITであるのとは対照的である。
ただし、Javaもサロゲートペアの文字に対しては、charは文字の一部であって
本当の1文字には対応していない。
※結局、どの言語も、1文字を固定長で扱い続けることは避けている。
[補足2]
char は、C言語が登場した時には、「文字」の意味であったが、
今は少なくとも C言語では文字の意味はほぼなく、1バイト(8BIT)の意味である。
そして、C言語でcharが1バイト(8BIT)で無い処理系は、主流ではないので無視
してよい。
Javaなどでは、charが 必ず16BITであるのとは対照的である。
ただし、Javaもサロゲートペアの文字に対しては、charは文字の一部であって
本当の1文字には対応していない。
※結局、どの言語も、1文字を固定長で扱い続けることは避けている。
948デフォルトの名無しさん
2021/11/13(土) 02:30:33.64ID:sxA0duhG メモリ確保が多発しそうなプログラムやね
949デフォルトの名無しさん
2021/11/13(土) 06:30:48.47ID:x1CN7sQN 老害が一生懸命考えたんだろw
メモリリークしまくられるよりマシ
メモリリークしまくられるよりマシ
950デフォルトの名無しさん
2021/11/13(土) 07:45:14.90ID:xg91cK1y CStringにせよbasic_stringにせよメモリ確保の多発なんて心配しなくていいよ
JavaのStringじゃないんだから
JavaのStringじゃないんだから
951デフォルトの名無しさん
2021/11/13(土) 08:44:09.90ID:sxA0duhG こういう時reserveしてなくても問題ないの?
最大容量わかってるやん。
最大容量わかってるやん。
952デフォルトの名無しさん
2021/11/13(土) 09:34:35.76ID:GqP7nzeW メモリ2倍取るのと再配置とどっちが無駄かはそれこそ環境と目的次第だろ
953デフォルトの名無しさん
2021/11/13(土) 11:06:02.43ID:wYZH/w0f954デフォルトの名無しさん
2021/11/13(土) 11:44:37.82ID:wZp5djKL vectorもそうだけど、倍々にメモリを再配置していくアルゴリズムがそこそこ効率的なので、
たいていの場合はreserveしようがしまいが有意な差は出ないよね
たいていの場合はreserveしようがしまいが有意な差は出ないよね
955デフォルトの名無しさん
2021/11/13(土) 12:34:40.00ID:GR8tTV2x956デフォルトの名無しさん
2021/11/13(土) 12:36:34.59ID:GR8tTV2x >>944-945
良い子は真似をしないように
良い子は真似をしないように
957デフォルトの名無しさん
2021/11/13(土) 12:49:12.18ID:jQtDYU1M プログラミングとしてはiso2020使ってた頃と大して変わらんよね
低レベルで吸収してくれんとやってられん
低レベルで吸収してくれんとやってられん
958デフォルトの名無しさん
2021/11/13(土) 13:24:23.81ID:xg91cK1y ファイル読み取りもシステムコール側が独自にバッファリングしていることが多いから
プログラマ側ががんばってバッファリングしても二度手間だったりする
プログラマ側ががんばってバッファリングしても二度手間だったりする
959ハノン ◆QZaw55cn4c
2021/11/13(土) 15:53:45.28ID:DyUYxUU0961デフォルトの名無しさん
2021/11/13(土) 17:16:26.07ID:kpA91CRo 文字コードなんて事実上iconvが標準だろ
せいぜいicuくらい
他は一部のプラットフォーム固有の関数くらい
制御コードはISO2022でもなければ使わんし、いうてwhite spaceの類は使われてないから気にすんな
真面目にやると文字の境界見つけんのがだるいし、合成文字の扱いも微妙、異常系の仕様も要件次第になるし、Unicodeのバージョンも無限に上がりそうだけどなw
ってわけでC++とか関係ない話だからどうでもいいよ
せいぜいicuくらい
他は一部のプラットフォーム固有の関数くらい
制御コードはISO2022でもなければ使わんし、いうてwhite spaceの類は使われてないから気にすんな
真面目にやると文字の境界見つけんのがだるいし、合成文字の扱いも微妙、異常系の仕様も要件次第になるし、Unicodeのバージョンも無限に上がりそうだけどなw
ってわけでC++とか関係ない話だからどうでもいいよ
962デフォルトの名無しさん
2021/11/13(土) 18:02:09.89ID:vJfZgOKN C++ なら strstream やろ
963デフォルトの名無しさん
2021/11/13(土) 18:03:36.59ID:vJfZgOKN965デフォルトの名無しさん
2021/11/13(土) 19:29:59.64ID:vJfZgOKN966デフォルトの名無しさん
2021/11/13(土) 21:14:20.03ID:aIrFEHKz 自分はHTML5の仕様に従って変換してます!
967デフォルトの名無しさん
2021/11/14(日) 08:24:14.02ID:gLhea8X6 >>959
結合文字列があるから、結局コードポイントに必ず1文字が対応しているとは限らないし、
何使ってもUnicodeは闇じゃないか。
まあ、UTF32使えばコードポイントがぶっ壊れることは避けられるけれども。
結合文字列があるから、結局コードポイントに必ず1文字が対応しているとは限らないし、
何使ってもUnicodeは闇じゃないか。
まあ、UTF32使えばコードポイントがぶっ壊れることは避けられるけれども。
968デフォルトの名無しさん
2021/11/14(日) 09:14:46.42ID:ybz8bu8o この場合同じコードポイントでの変換なわけだし一文字がどうとか関係ないが。
969デフォルトの名無しさん
2021/11/14(日) 10:38:12.94ID:G9ajtZXw >>948
Perl/Ruby/JSなんかで正規表現を使って置換する場合でも、
同じようなアルゴリズムを使ってるはずだから、これが
特に非効率なわけではないし、代わりになるアルゴリズムで
これよりトータルで効率の良いものも恐らく存在しない。
1.例えば、0x0aと0x09の出現回数を最初に数えれば、必要な
dstのバイト数を見積もることは可能だが、その場合は、
二回もパースが必要になるし、プログラムも分かりにくくなる。
二回パースすることによる速度低下も有る。
2.dstのサイズはsrcのサイズの2倍を越えないので、単純に
dstの内部バッファをsrcのバイト数の2倍として予約しておけば
メモリ確保は一回で済むが、srcが巨大な時、メモリを圧迫し、
余り良いアルゴリズムとは言えない。
Perl/Ruby/JSなんかで正規表現を使って置換する場合でも、
同じようなアルゴリズムを使ってるはずだから、これが
特に非効率なわけではないし、代わりになるアルゴリズムで
これよりトータルで効率の良いものも恐らく存在しない。
1.例えば、0x0aと0x09の出現回数を最初に数えれば、必要な
dstのバイト数を見積もることは可能だが、その場合は、
二回もパースが必要になるし、プログラムも分かりにくくなる。
二回パースすることによる速度低下も有る。
2.dstのサイズはsrcのサイズの2倍を越えないので、単純に
dstの内部バッファをsrcのバイト数の2倍として予約しておけば
メモリ確保は一回で済むが、srcが巨大な時、メモリを圧迫し、
余り良いアルゴリズムとは言えない。
970デフォルトの名無しさん
2021/11/14(日) 10:52:13.79ID:G9ajtZXw >>951
文字列のバッファは、不足すると2倍、2倍、・・・で確保されていくので
確保される回数は、最終的な文字列のバイト数を N としたとき、大体、
log2(N) 回程度となり、バッファがコピーされるトータルのバイト数は、
b = a + a*2 + a*2^2 + a* 2^3 + ... + a* 2^k
k = log2(N) 程度
a = 文字列クラスの内部バッファの初期バイト数。
となり、大体で言えば、2N を越えない。
1 + 2 + 2^2 + 2^3 + ... + 2^k
は 2進数で考えれば、全てのビットが 1 に成っている整数で、
2^{k+1} = 2*2^k = 2*2^{log2(N)} = 2 * N
であることに注意する。
ただし、bの値は大体で書いたので、厳密には少し違うだろう。
文字列のバッファは、不足すると2倍、2倍、・・・で確保されていくので
確保される回数は、最終的な文字列のバイト数を N としたとき、大体、
log2(N) 回程度となり、バッファがコピーされるトータルのバイト数は、
b = a + a*2 + a*2^2 + a* 2^3 + ... + a* 2^k
k = log2(N) 程度
a = 文字列クラスの内部バッファの初期バイト数。
となり、大体で言えば、2N を越えない。
1 + 2 + 2^2 + 2^3 + ... + 2^k
は 2進数で考えれば、全てのビットが 1 に成っている整数で、
2^{k+1} = 2*2^k = 2*2^{log2(N)} = 2 * N
であることに注意する。
ただし、bの値は大体で書いたので、厳密には少し違うだろう。
971デフォルトの名無しさん
2021/11/14(日) 10:59:39.62ID:G9ajtZXw >>970
1 + 2 + 2^2 + 2^3 + ... + 2^k
= Σ_{i=0}^k 2^i
= (1 - 2^{k+1}) / (1 - 2)
= 2^{k+1} - 1
である。途中、等比数列の和の公式:
等比数列の和 = 初項 * ( 1 - 公比^項数) - ( 1 - 公比 )
を用いた。
1 + 2 + 2^2 + 2^3 + ... + 2^k
= Σ_{i=0}^k 2^i
= (1 - 2^{k+1}) / (1 - 2)
= 2^{k+1} - 1
である。途中、等比数列の和の公式:
等比数列の和 = 初項 * ( 1 - 公比^項数) - ( 1 - 公比 )
を用いた。
972デフォルトの名無しさん
2021/11/14(日) 11:04:20.53ID:G9ajtZXw973デフォルトの名無しさん
2021/11/14(日) 12:08:34.21ID:p964tW2k 俺は数年前業を煮やして自前のstringクラスを作ってしまった(´・ω・`)
・sjis/utf8/utf16/utf32対応で比較・代入などどの組み合わせでも問題なく動く
・どの文字コードでも同じハッシュ値を生成する
・char型がsjisなのかutf8なのかはdefineで決める
・テンプレートベースのformatを用意してprintfを置き換え
みたいな
・sjis/utf8/utf16/utf32対応で比較・代入などどの組み合わせでも問題なく動く
・どの文字コードでも同じハッシュ値を生成する
・char型がsjisなのかutf8なのかはdefineで決める
・テンプレートベースのformatを用意してprintfを置き換え
みたいな
974デフォルトの名無しさん
2021/11/14(日) 12:57:01.80ID:hL5WeBkj >>973
保持するときのエンコードは?
保持するときのエンコードは?
975デフォルトの名無しさん
2021/11/14(日) 12:58:38.01ID:p964tW2k >>974
文字コードの種類に1バイト用意して、後はそれぞれの文字コードで直接保存している
文字コードの種類に1バイト用意して、後はそれぞれの文字コードで直接保存している
976デフォルトの名無しさん
2021/11/14(日) 13:30:12.63ID:mwYTHPjW えー
コンストラクタで各種文字コードのバイト列を受け取れるようにして内部保持形式はUTF32でよくない?
コンストラクタで各種文字コードのバイト列を受け取れるようにして内部保持形式はUTF32でよくない?
977デフォルトの名無しさん
2021/11/14(日) 13:42:53.43ID:p964tW2k それだと大きめのテキストファイルを開いたときなどいちいち変換が入って遅くなりそうだから…といっても実際にはどっちが効率良いのかまでは比べてないけど
異なる文字コード同士比較する時なんかはコードポイント単位で読み出して結局utf32ベースで処理するしな…
異なる文字コード同士比較する時なんかはコードポイント単位で読み出して結局utf32ベースで処理するしな…
978デフォルトの名無しさん
2021/11/14(日) 13:44:30.36ID:E00roTgy >dstのサイズはsrcのサイズの2倍を越えない
しね
しね
979デフォルトの名無しさん
2021/11/14(日) 13:59:19.66ID:5aeLrxCA プログラマーは3種類しかいない
文字コードが分からない一般プログラマー
文字コードを理解したと勘違いしている地雷プログラマー
そして人類が文字コードを理解するのは不可能だと悟った上でなんとか事故が起こらないように心を砕く真の専門家だ
文字コードが分からない一般プログラマー
文字コードを理解したと勘違いしている地雷プログラマー
そして人類が文字コードを理解するのは不可能だと悟った上でなんとか事故が起こらないように心を砕く真の専門家だ
980デフォルトの名無しさん
2021/11/14(日) 14:17:19.40ID:p964tW2k >>976
あーあとは、これのstring_viewバージョンがあって、関数のパラメータをconst mystring_view& strみたいに受けると、どんな対応してる文字なら(リテラルや対応してるクラス含めて)なんでも参照として受け付けるから便利なんだよね
あーあとは、これのstring_viewバージョンがあって、関数のパラメータをconst mystring_view& strみたいに受けると、どんな対応してる文字なら(リテラルや対応してるクラス含めて)なんでも参照として受け付けるから便利なんだよね
981デフォルトの名無しさん
2021/11/14(日) 14:59:21.42ID:WpZMPVn+ それconst&いるんか?
982デフォルトの名無しさん
2021/11/14(日) 15:13:11.67ID:p964tW2k 実質的にはほとんどなにも変わらないと思うけど、無駄なコピーが減る場合もあるので付けておくに越したことはないと思う
983デフォルトの名無しさん
2021/11/14(日) 15:45:24.64ID:p964tW2k まぁ、でも参照もコストゼロってわけじゃないから、場合によっては遅くなることもあるか…
984デフォルトの名無しさん
2021/11/14(日) 16:54:05.80ID:tkHjD9h1 const って伝播するから嫌い
付けるのは反対ではないが
付けるのは反対ではないが
985デフォルトの名無しさん
2021/11/14(日) 17:26:15.73ID:CXUBNW9m 伝播ってどういうこと?
986はちみつ餃子 ◆8X2XSCHEME
2021/11/14(日) 17:38:21.62ID:A4GQ1/1N 参照で受け取るときには const を付けないと右辺値を受け取れないんだよ。
&& にしたら逆に右辺値しか受け取れないし、
テンプレートにするのも面倒くさいし、
const 参照で不都合がないならまずそれを選ぶのが常道になってる。
積極的にそうする必要はなくても手癖でやるよね。
&& にしたら逆に右辺値しか受け取れないし、
テンプレートにするのも面倒くさいし、
const 参照で不都合がないならまずそれを選ぶのが常道になってる。
積極的にそうする必要はなくても手癖でやるよね。
987はちみつ餃子 ◆8X2XSCHEME
2021/11/14(日) 17:44:17.95ID:A4GQ1/1N >>985
const 無しから const 付きの参照へは暗黙の型変換が許されるがその逆はない。
const 付きにしたらそれがずっと伝わっていくってことだ。
元のオブジェクトが const でないなら const_cast で const を剥がして書き換えるのは一応は有りなはずだが、
かなり行儀が悪いしな。
const 無しから const 付きの参照へは暗黙の型変換が許されるがその逆はない。
const 付きにしたらそれがずっと伝わっていくってことだ。
元のオブジェクトが const でないなら const_cast で const を剥がして書き換えるのは一応は有りなはずだが、
かなり行儀が悪いしな。
988デフォルトの名無しさん
2021/11/14(日) 17:59:13.06ID:CXUBNW9m スコープ限定のconstを欲するひとがいるとは思わんかった
989デフォルトの名無しさん
2021/11/14(日) 18:02:00.71ID:nLCz7RQY 責任ベースのconstは有り得るのでは?
privateが在るんだから。
privateが在るんだから。
990デフォルトの名無しさん
2021/11/14(日) 18:05:38.66ID:leu9kbhs というか伝播しなかったら困るのでは?
お行儀悪くconst_castしない前提なら
ある関数の引数がconstだったら、その関数が呼び出す関数もまたconstであるという保証は大切だろうし
お行儀悪くconst_castしない前提なら
ある関数の引数がconstだったら、その関数が呼び出す関数もまたconstであるという保証は大切だろうし
991デフォルトの名無しさん
2021/11/14(日) 18:45:07.42ID:nLCz7RQY もちろんそれは大切ですよ。
伝搬しなかったら意味ないし。
伝搬しなかったら意味ないし。
992ハノン ◆QZaw55cn4c
2021/11/14(日) 19:45:46.13ID:5CSGBVhH K&R2 にも const はありますが全然使わなかったなあ…volatile 同様キワモノだとおもっていました(爆)
993デフォルトの名無しさん
2021/11/14(日) 22:33:34.47ID:oUoND4t/ C++20からコルーチン入るけどコルーチンの返り値に関数内の変数の参照返すの問題になるかな?
hoge& test(){
hoge tmp;
for(int i=0;i<10;++i){
co_yield tmp;
}
}
//返り値は実際はgeneratorとかになるかもしれない
hoge& test(){
hoge tmp;
for(int i=0;i<10;++i){
co_yield tmp;
}
}
//返り値は実際はgeneratorとかになるかもしれない
994デフォルトの名無しさん
2021/11/14(日) 22:35:39.21ID:PetPaRNq yeild使えるようになるのか
995デフォルトの名無しさん
2021/11/15(月) 01:03:02.10ID:tPLK0GqY viewは値渡しが基本だよ
996デフォルトの名無しさん
2021/11/15(月) 06:05:50.61ID:Rt8JG1Np 何かのリミッタが外れた感じだね
無差別にぶち込むようになった
無差別にぶち込むようになった
997デフォルトの名無しさん
2021/11/15(月) 06:11:48.42ID:Rt8JG1Np 江添が逃げた理由も察しがつく
998デフォルトの名無しさん
2021/11/15(月) 15:55:33.66ID:Ux5WoKB6 更新してないよね
999デフォルトの名無しさん
2021/11/15(月) 16:41:30.12ID:i/3H6iLT hage
1000デフォルトの名無しさん
2021/11/15(月) 16:42:03.92ID:i/3H6iLT 10^3
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 98日 5時間 44分 33秒
新しいスレッドを立ててください。
life time: 98日 5時間 44分 33秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- 【芸能】デヴィ夫人「日本では犬猫は器物。動物保護を何とか立法化したい」 人と動物が共生を力強く訴え [冬月記者★]
- 【画像】TOKIO山口達也に「いいべ」された当時のJK、性加害の反動であたしこグラドルにwww [779857986]
- 寒さしのげる場所があって食べ物も豊富にあるなら熊は冬眠しないの?
- 声優・矢尾一樹の妻「治療の影響で思う様に話せない彼に、近くで仕事をしてきた人が、かっこ悪い!もう辞めなよと言った。私は許さない」 [594040874]
- 気象庁・高市内閣「この後311級の地震の可能性があります。北海道〜関東の人は1週間は地震が来てもすぐ逃げられる格好をしてください」 [597533159]
- 【悲報】高市早苗の擬人化がXで大バズりwwwwwwwwwwww [455031798]
- こんぺこ!こんぺこ!こんぺこ!🐰🏡
