[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 03/05 17:41 / Filesize : 300 KB / Number-of Response : 1027
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part157



1 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 10:57:31.60 ID:JaaB5Egp.net]
前スレ
C++相談室 part156
https://mevius.5ch.net/test/read.cgi/tech/1621389313/

2 名前:デフォルトの名無しさん [2021/08/09(月) 11:24:40.26 ID:M3I2CbwW.net]
前スレの >>997
キューが溢れないようにするのなら
スレッドが実行中かどうかを確認するのではなく
キューサイズを見るほうが確実じゃないですか?

3 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 11:43:30.76 ID:GC6B710d.net]
>スレッドが実行中か確認したいってどんなときなのかな?
たとえばゲームでセーブするとき、
メインの処理はブロックしたくないので別スレッドで実行しつつ「セーブ中です」みたいな表示を出し、終了したら消す
みたいな時かな

4 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 11:48:24.98 ID:OWI9S7jW.net]
>>3
それはセーブするスレッドのほうが開始と終了を通知すればよくない?
そうデザインするもんじゃないの?

できないときもあるのかもしれんが。

5 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 11:56:53.44 ID:GC6B710d.net]
>>4
もちろん方法ならいくらでもあると思うけど、別スレッドのインスタンス1つで全部済むなら、そっちの方がすっきりするし楽でしょ

6 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:12:57.14 ID:GC6B710d.net]
>>4,5
あぁ、いやそうじゃないか
ゲームのあらゆる部分をスレッドセーフで設計すれば良いのかもしれないけど、
ゲームのメインの状態遷移なんてわざわざマルチスレッド化するような重い処理でもないので、
その辺の表示とかはシングルスレッド前提で書いてるわけよ、もちろんそのほうが楽

7 名前:だからw []
[ここ壊れてます]

8 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:17:21.54 ID:qYrd5+ip.net]
この「実行中」が実際にタイムスライスが割り当てられている状態を意味しているんであれば
OSにもよるが実装が大変な割に実際に役立つシーンは限られるような。
>>4であればjoinableで十分だろうし。

9 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:25:08.93 ID:DVzh2mox.net]
別スレッド処理の進捗を他スレッドから閲覧するためのパラメータを使っってる時点で、お察し

10 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:40:21.77 ID:S8n0VVLE.net]
前スレ997は色々勘違いしてそうな気がする
普通pushしようとしてキューが満杯なら何らかの同期メカニズムで自分を待ち状態にする
pop側はpopしたらその同期メカニズムに対して待ちを解除するだけだからスレッド自体が実行中かどうかなんて見る必要がない



11 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 13:35:16.98 ID:eF2Q2UUf.net]
std::condition_variable

12 名前:ハノン mailto:sage [2021/08/09(月) 13:52:46.20 .net]
正直いって pthread の条件変数は私には理解が難しく、私は安易に win32api のクリティカルセッション&シグナルを多用してしまうのです
ただし、スタベーションに陥ることが多々あり、どうもクリティカルセクション・シグナルでは駄目なパターンがあるかもしれない、とヒヤヒヤしています‥‥

13 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:01:28.39 ID:TRAo/ccI.net]
>>2
別に
Producer(pushする側)がこれからpushするのを待っている場合、
Consumer(popする側)はキューサイズ(キューの中の要素数)を見ても
Producerが待っているのかどうかの情報を得られない
なぜなら、まだpushしていないからな

14 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:14:45.62 ID:TRAo/ccI.net]
>>9
>pop側はpopしたらその同期メカニズムに対して待ちを解除するだけ
そういう実現方法も(pop側が行った待ち解除がキューイングされれば)成立する鴨、と>>997にちゃんと書いているもーん

15 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:32:36.91 ID:JaaB5Egp.net]
>>5
>>4って新規スレッド1個で全部済むと思うんだけど……

16 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:33:19.09 ID:S8n0VVLE.net]
>>13
いや、スレッドの実行状態なんて見てもしゃーないって話
pop後にpush側が実行中だとしてもそのチェック直後にpushするかも知れん
要するにスレッドの実行状態の変化は排他制御できないから意味がないって話
pop前にいちいちスレッドをsuspendしてチェックしてからresumeするとかするならできるかもしれないけどw

17 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:34:07.65 ID:aCXIbwxy.net]
std::vectorの部分ベクトルの切り出しって絶対O(要素数)の計算量かかりますよね?

18 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:40:14.51 ID:fi8SjIox.net]
「部分ベクトルの切り出し」とは何かを定義せよ。

19 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:47:54.30 ID:eF2Q2UUf.net]
こういうの?
std::vector<int> a{ 4, 6, 4, 9 };
std::vector<int> b(a.begin() + 1, a.begin() + 2);

20 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 15:11:52.58 ID:KzU8BZnC.net]
参照できればいいのか、コピーがいるのか、切り出し位置はわかってるのか、検索を伴うのか、
その辺の条件もなしに計算量の議論なんて出来んわ



21 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:11:11.49 ID:6v1cUfUr.net]
クラスAの内部にクラスBがある (入れ子クラス) として、B

22 名前:からAのメンバにアクセスするテクってないんですかね?
アクセスしたいメンバをstaticにはしたくないです
[]
[ここ壊れてます]

23 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:20:25.36 ID:GC6B710d.net]
>>20
AへのポインタをBに定義して、コンストラクタかなんかで渡せばいいのでは?

24 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 16:48:43.56 ID:OWI9S7jW.net]
>>20
クラスの中でクラスを定義しても A の名前空間の中に B が定義されるってだけ。
B のオブジェクトを作っても A のオブジェクトが存在しないなら存在しないオブジェクトのメンバにはアクセスできない。
A のオブジェクト (インスタンス) と B のオブジェクトの間には勝手に関係が出来たりもしない。
関係ないのに関係あるように見えて初心者が混乱してるのはどっかの質問サイトでも見たことがある。
よく理解できてないならまずはクラスの定義を入れ子にせずにやってみるのがオススメ。

25 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:52:51.13 ID:S8n0VVLE.net]
>>20
AやBのインスタンスをどう生成してるのよ
>>21の言うようにAへのポインタ持ってたら普通にアクセスするだけでしょ
class A {
public: int i;
class B {
public: B(A* a){ … = a->i; }
}
}

auto b = new A::B(new A());

26 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:59:35.77 ID:eF2Q2UUf.net]
>>19
コピーか参照かは1要素あたりの処理量なので
コンテナの計算量には関係ない

27 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:00:48.11 ID:hJGoZPOe.net]
絶対レビュー通らないウンココードでよいなら
(char*)this + offsetof(A, b)でなんとかならんのか

28 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:33:38.90 ID:GC6B710d.net]
class Aをtemplate化して、class BでAを継承すれはメンバにはアクセスできるけど、たぶんそういうことがしないんじゃないんだろうなw
コンテナクラスのイテレータから親クラスインスタンスのメンバにアクセスしたいとかか?

29 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:48:31.00 ID:eF2Q2UUf.net]
リファレンサを作るときなんか親オブジェクトへのポインタ使うね

30 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 20:07:17.09 ID:XVy1LhuX.net]
>>23
普通にコンポジションで実現できる条件だよな
メルプラネットの奴らも同じこと言いそう



31 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 00:55:38.92 ID:rk6SLsdN.net]
親オブジェクトへのポインタをうっかり共有ポインタにすると循環参照の原因になる(小並感)

32 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 03:53:30.08 ID:mPLpHQ1a.net]
+=の引数が1のときは++を呼ぶようにする方法ってありますか

33 名前:ハノン mailto:sage [2021/08/10(火) 04:41:55.83 .net]
>>30
自分でそう書くのがいいのでは?
(n == 1) ? x++ : x += n;

34 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 08:16:11.83 ID:JssHBcjd.net]
>>30
遅くなる可能性があるから気にしない。
コンパイル時に解決できるなら++使っても同じだし、実行時に解決するようだと1かどうかの判定が増えて遅くなる。

35 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 12:11:16.71 ID:OMlKC5pQ.net]
TCPIPのソケット通信プログラム作ろうと思っているのですが、
コネクションを維持し続ける場合のデメリットって何がありますか?

36 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 12:42:43.27 ID:ZRv1Vy3I.net]
>>32
後出しになって申し訳ありませんが、*、!=、++、+=、- 辺りが定義されたイテレータを持つ自作のデータ構造を範囲for文で走査することを考えています
それ自体は想定した通りにできたのですが、その範囲for文をomp並列化するとイテレータのインクリメントが ++ でなく

37 名前: +=1 で行われるようになります
で、その自作データ構造では ++ よりも += の方が重い実装になっているので、+=1 よりは ++ の方を使ってほしいです

omp に特有の仕様に思えるので、普通に += の冒頭で引数が1かどうかの分岐を入れることにしようかと思います

ありがとうございました
[]
[ここ壊れてます]

38 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 14:57:46.78 ID:W7aMf5pX.net]
マルチスレッドのキューのサンプルをSTLで作りゃったーしたったわ、
https://ideone.com/bS7rqc

↓ここのC#のサンプルプログラムの移植
// https://atmarkit.itmedia.co.jp/ait/articles/1801/31/news023.html

フラグの必要性は意味を取り違えていたわサーセン、
しかしこれフラグ(runningFlag)無しでやるとしたら終了時にConsumerがいちいちProducerが
join可能か調べる(std::thread::joinable())ことになってスレッドより先にプログラムした人が終了したくなるお
フラグで済むのに、

39 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:21:27.23 ID:W7aMf5pX.net]
Windowsのイベントオブジェクトと条件変数の違いまとめ
https://dev.activebasic.com/egtra/2011/09/19/413/

40 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:28:07.54 ID:W7aMf5pX.net]
と思ったがやっぱ当初の意味(Producerが待っているのかどうか)のフラグが無いと、
キューが空になった後のnotifyで、1万個あるかもしれない仕事の無いConsumerが次々起床され、
巡り巡ってようやくProducerが起床されるみたいな非効率が生じる余地があるやんけ;;;

やっぱ当初の漏れのフラグ必要という意見で正しかったのかもしんない
漏れは天才なのかもしんない、
かもしんない運転、



41 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 18:25:35.80 ID:W7aMf5pX.net]
つかその前に、漏れの天才eyesが改造元とした@IT様のサンプルプログラムに
スレッドのディスパッチ依存で終了できなくなることがあるという恥ずかしいバグを発見した、
論より証拠:
https://ideone.com/NbKdEQ

変更点は、Consumerを1個にして、Producerの側のある個所にsleepを入れただけ
(マクロ CAUSE_STOPPING_FAILURE_BUG で条件コンパイルで有効にしている個所
これでConsumerスレッドが終了できなくなる

対策は、同ソースコードの BUGFIX_STOPPING_FAILURE_BUG マクロを有効にしたら宜しい

天才の判断である

42 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 18:42:35.68 ID:mYAwPqTL.net]
>>34
すみません。この件なんですが、

void operator += (int n){
 if(n == 1){
  // ここ
 }else{
  ……
 }
}

「ここ」で演算子++を呼びたいときってどう書いたら良いでしょうか
++の中身をコピペしても良いのですが、
this -> ++
みたいなノリで呼び出せた方が都合が良いです

43 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 19:06:35.71 ID:W7aMf5pX.net]
というわけで最終的な版を貼る、
https://ideone.com/G3XeAg

ProduceとConsumerそれぞれに対する起床条件を分離すた、

日本語ではいくら説明しても一向に理解の光が射さなかったボンクラ学生レヴェルの>>15でも
100行足らずのソースコードなら読めるんじゃないの
知らんけど

44 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 19:11:32.09 ID:cMFKuo8t.net]
>>39
++(*this);
または
this->operator++();

45 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 19:24:28.15 ID:mYAwPqTL.net]
>>41
ありがとうございます
前置/後置の別が自分

46 名前:フ中でよく付いていませんが、教えていただいたことに基づいて調べてみます []
[ここ壊れてます]

47 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 19:37:16.72 ID:Lbev+Y0v.net]
>>40
で、そこで取れると良い「スレッドの実行状態」って結局何なん?

48 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 20:32:27.09 ID:W7aMf5pX.net]
「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
とれると良い、ではなく取ることが必須や

なぜなら、WIN32APIのイベントは1回だけキューイングされるので投げたら投げっぱなしでもそのうち
受け取ってもらえるが、(pthread系統のしくみである)状態変数はそうではなく、
起床信号を投げつける前に相手が信号をキャッチ可能なのか(待ちに入っているのか)知る必要がある

なお、イベントのキューイングの有無によって話が変わる旨はすでに書いたある(>>997
上記のことを書いてあるというのに理解もせずにしつこく同じことを繰り返し言ってきたのが>>15

49 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 21:01:08.35 ID:Lbev+Y0v.net]
>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や

それって具体的にどういうものを想定しているんだろう。
もともとの話はstd::threadに追加したい機能だったと思うけど、この説明だけじゃ全然想像がつかない。

50 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 22:11:54.85 ID:W7aMf5pX.net]
なんか元にしたコードにまだ問題があった気配orz
MAX_QUEを1にすると高い頻度でProducerとConsumerが両方待ちに入ってしまいハングアップする、、、
対策版は多分これ↓で良いんジャマイカ……
https://ideone.com/at7ef9
(何が起きていて、どうしてこれで対策なのかはコメント参照、

>>45
>>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
>それって具体的にどういうものを想定しているんだろう。
今回のサンプルコードでは具体的にはありません(キリ
しいて言えば!runningFlagならConsumerが自身を待ちに入れない(∵Producerがもう起こしてはくれない
というのはあるが、>>35に書いた通りフラグ以外の方法でも同じ判定を行える

言っていることにブレがあるのは今日pthreadを勉強したばっかりやし、
天才なので大目に見てホスイ、



51 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 22:25:26.70 ID:W7aMf5pX.net]
でもまあコメントを読んでいただければ、pthread系のしくみだと
起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
今回はたまたま見込みでnotifyして話が通るからスレッドの実行状態を表す変数が具体的に生じなかっただけ

52 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 22:47:59.90 ID:C0wcAbjz.net]
すみません。
自作プログラムが特定のPCだけ同じ場所でntdll.dllのエラーで止まるのですが、何が原因と考えられるでしょうか?
他のPCでは問題無く進み、エラーを起こすPCのメモリにも異常は見つかりませんでした。

53 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:06:02.90 ID:OOQ3UOoB.net]
>>48
未初期化変数があって無効なアドレスにアクセスしたとかじゃね

確実なことを言うためには例外コードが知りたい
あと問題の箇所のソースコードも

54 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:24:57.75 ID:C0wcAbjz.net]
ソースはすみません、ちょっと出せないです
エラーコードは0xc0000005でしま

55 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:30:51.53 ID:OOQ3UOoB.net]
はいメモリアクセス違反ですね
デバッガでがんばって調べてね

56 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:32:41.60 ID:C0wcAbjz.net]
あざす

57 名前:デフォルトの名無しさん [2021/08/10(火) 23:34:52.75 ID:5fGESjxl.net]
他の言語にはスレッド実行中か判定するAPIあるしstd::thread作った人達だってそのくらいのこと知ってたでしょ
boost::thread時代にそういった要望もあっただろうし
それでもあえてstd::threadにはスレッド実行中を調べる機能を付けなかった
本質的に必要な機能ではないと

58 名前:判断したんじゃないの? []
[ここ壊れてます]

59 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:44:13.15 ID:rk6SLsdN.net]
スレッドそのものの終了状態を知る需要はあまりなく、スレッド内で行われるユーザー定義処理が終わったかどうかが重要だからでしょ

60 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 23:50:54.98 ID:Lbev+Y0v.net]
>>47
>起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う

それがwaitで待っている状態かそうでないかを意味しているんだとしたらそれは正しくない。
チェックした次の瞬間にwaitする可能性もあるわけなんで。



61 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 01:24:38.33 ID:qkzYmFIh.net]
>>55
>チェックした次の瞬間にwaitする可能性もあるわけなんで。
無い
チェックと処置をmutexによる単一のロック期間の中でアトミックに行うのだから>>55は全くナンセンスな問題提起

>>53
thread::joinable()があることは書いたもーん

62 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 01:28:13.23 ID:qkzYmFIh.net]
問題だらけだった@IT様のサンプルコードだけど
これまともに実装するとしたら条件変数をConsumer x NとProducerの計N+1個設けて、
さらにConsumerそれぞれが待っているのか動いているのかを示すフラグを設けて
全部動いていたらProducerを待たせる
Consumerが待ちに入る直前にProducerにnotifyかけてキックする、みたいな
スレッドプールを手で実装するみたいな話になりそう……

でここまでやるならConsumerの状態変数が実体としてコードに現れる

63 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 01:44:51.77 ID:01hIEDa4.net]
何を主張したくてごちゃごちゃ言ってるのかさっぱり見えないし途中で変わったりしてるようでもあるので、
続けるならそもそもどういう主張をしているのかいっぺんまとめてほしい。

64 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 08:13:22.18 ID:SyYdmIb8.net]
>>56
std::threadから取得する「スレッドの実行状態」の話をしているんだが。
それをmutexでアトミックに操作する???

65 名前:デフォルトの名無しさん [2021/08/11(水) 09:56:36.95 ID:8ERcfmko.net]
C++ってiPhoneアプリ作れる?

66 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 12:11:01.26 ID:sOdrsbt7.net]
>>60
作れる。QtやUnityで。

67 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 12:13:04.52 ID:sOdrsbt7.net]
iPhone専用でいいなら、そもそも、Appleが提供している標準開発環境だけでも
C++で作れる。
iPhoneの標準開発言語はSwiftだが、SwiftはC++と相互に呼び出せるから。
ただし、それだけだと面倒かも知れない。
そういう場合は、Qtで作れば。

68 名前:デフォルトの名無しさん [2021/08/11(水) 12:52:41.17 ID:MU7UJMps.net]
std::vector で insert するとき
v.insert(v.begin() + n, hoge);
とかすると思いますが
このときの n の型って何ですか?
int ?
unsigned long ?
size_t ?
あとこういう型を調べるときって
vector のどことか iterator のどこを調べると判りますか?

69 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 13:03:37.14 ID:19rzwYjH.net]
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]が簡単だと思う

70 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 14:01:06.77 ID:OqxISI0I.net]
>>59
ID:W7aMf5pX = ID:qkzYmFIh はスレッドの状態として
・その瞬間の状態: Run/Ready/Wait/...
・終了してるかどうか: thread::joinable で取得できる
を混同してる(わざとかどうかは知らんが)
あと条件変数とスレッドの状態も混同してるので
> チェックと処置をmutexによる単一のロック期間の中でアトミックに行うのだから
なんて意味不明なことを言い出してる
これ以上続けるなら>>58が言うように本人にまとめてもらわないとますますグダグダになるだけだと思う



71 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 14:15:21.29 ID:EWMgwFeS.net]
std::thread使ったことないから自信無くて黙ってた

72 名前:ッど
thread::joinable()って別にスレッドが終了したかの判定ではなくない?
他スレッドでの実行を管理していない状態の(空の)オブジェクトが作れるから、そういう空の状態かどうかの判定関数であるように読めた
fstream::is_open()的な……
[]
[ここ壊れてます]

73 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 14:23:39.88 ID:01hIEDa4.net]
>>63
暗黙変換があるから n の型としてはすべての整数型があり得る。
基本的には、生ポインタで実装される可能性もあるものなので ptrdiff_t だと思っておけばいい。
正確な型が必要なら difference_type とか iter_difference_t とかで調べればわかる。

74 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 14:56:54.71 ID:OqxISI0I.net]
>>66
> thread::joinable()って別にスレッドが終了したかの判定ではなくない?
もちろん正確にはスレッド変数がスレッドと関連づいてるかどうかの判定
彼は>>35辺りでスレッド終了判定と思い込んでるフシが見られるのでそう書いてある

75 名前:デフォルトの名無しさん [2021/08/11(水) 15:08:15.20 ID:MU7UJMps.net]
>>67
ありがとうございます

>>64
>現物で調べるならVisual Studioの[F12]が簡単だと思う

それで判るのは自分で定義した可能性の高い n の型ですよね?
知りたいのは v.begin() + n に要求されている型のことです

76 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 15:28:09.46 ID:EWMgwFeS.net]
>>68
やっぱりそうですよね
じゃあ>>65の2個目の中黒の内容については引用??

例のコードではjoinableなんか使ってないし>>7が書いたのを試しもせずに真に受けた感じなのかな

77 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 15:29:37.31 ID:EWMgwFeS.net]
>>69
v.begin().operator+(n)とでも書き換えてoperator+で[F12]しろということではなかろうか

78 名前:はちみつ餃子 mailto:sage [2021/08/11(水) 15:43:43.66 ID:QcAq7ivU.net]
>>69
ランダムアクセスイテレータには difference_type (またはそれに暗黙に型変換出来る何か) を足すことができて、
その結果の型はイテレータ自身と同じ。
https://timsong-cpp.github.io/cppwp/n3337/random.access.iterators

79 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 15:52:06.26 ID:SyYdmIb8.net]
>>66
>thread::joinable()って別にスレッドが終了したかの判定ではなくない?

実際にそのスレッドが実行中か待ちか終了しているかを表しているわけじゃないことはその通り。
で、たぶんそれで十分だからjoinable以上の機能は用意されなかった。

ところがそれが役に立つ場面があるよと言ったのが前スレ>>997
このスレの>>35と同一人物かどうかは知らんが。

80 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 15:54:21.05 ID:19rzwYjH.net]
>>71
そういうこと



81 名前:デフォルトの名無しさん [2021/08/13(金) 02:38:58.72 ID:tLa9gek2.net]
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 したポインタを返したいのですが問題ありませんか?

82 名前:デフォルトの名無しさん mailto:sage [2021/08/13(金) 02:56:15.88 ID:nopi39s7.net]
>>75
shared_ptr<char *> だと、たぶんやりたいことはできてない。
shared_ptr<char[]> の間違いなんだろうと思うけど、この時点でコンパイルすら試してないのが見て取れる。
参照カウンタの動きは挙げられたソースだけじゃ読み取れないけど、無限に増えるなんてことはまず起こらない。
shared_ptr の use_count() で取れるから試してみればいい。
問題があるかどうかも自分で試してみればいい。何を「問題」とするかこちらにはわからないし。

83 名前:デフォルトの名無しさん mailto:sage [2021/08/13(金) 09:51:25.31 ID:BE9FMbqU.net]
個別の事例で心配ない、問題ないという返答を得たとしても理解が深まらない。
shared_ptr のメカニズムを理解できないと何度でも心配になるだけ。



84 名前:ヌういう理屈で参照カウンタが無限に増えると思ったのかを説明してみて。
考え方に間違いがあれば指摘するよ。
[]
[ここ壊れてます]

85 名前:デフォルトの名無しさん mailto:sage [2021/08/13(金) 11:40:57.21 ID:UG8FRdqC.net]
char *mystrcat(char *a, char *b)
{
// a に b を結合して
return make_shared<char []>(a);
}
じゃいかんの
しらんけど

86 名前:デフォルトの名無しさん mailto:sage [2021/08/13(金) 14:30:41.36 ID:vEVo7A6C.net]
適当な質問者と適当な回答者
ゴミとゴミをあわせてもゴミはゴミ

87 名前:デフォルトの名無しさん mailto:sage [2021/08/13(金) 18:27:35.00 ID:tLa9gek2.net]
shared_ptr<char []> c(a);
return &c[0];

88 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 08:57:21.71 ID:dlgzlAXX.net]
namespaceってどのように使うものなんですか?
存在意義がわからない。

89 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 09:56:52.00 ID:2Gpa2MRC.net]
>>81
大規模ライブラリを設計するときに重宝する機能
詳しい経緯は知らないがグローバルスコープの識別子名の競合を回避する目的で導入されたと思う
namespaceがないC言語時代にいくつからの大規模ライブラリを組み合わせたときに何が起きがちだったか知っていれば納得出来るはず

どんな機能もそうだが、自分が必要と思った時に使えば良いだけだよ
存在意義が分からないならお前にとっては必要のない機能ということだから、気にする必要はない

90 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 10:45:32.18 ID:MjnqNUAd.net]
Cにnamespaceが導入されないのは何故なんです?



91 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 10:48:18.77 ID:isR1pnnS.net]
>>75
蛇足だけど、理由がなければshared_ptr<char[]>の代わりにshared_ptr<str>にしたほうがいいな。
// a に b を結合して
return a
がすごく怖い。

92 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 11:05:20.03 ID:HmVXtcJk.net]
>>83
namespace

93 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 11:07:32.50 ID:HmVXtcJk.net]
>>83
namespaceを導入するということは :: だのマングリングだのADLだの色々付いてくるからな

94 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 11:09:29.69 ID:sh47n3w4.net]
>>83
マングリングが必要になってしまうから、ってのが大きいだろうな。

95 名前:デフォルトの名無しさん [2021/08/14(土) 11:16:28.29 ID:Wd8wuOU/.net]
C++を本格的に学ぼうと思って本を数冊買ったが、言語仕様が複雑な割には知らないとエラー起こすだろ
っていう項目が多くてビビってる。あと、きれいなコードを書くのに尋常じゃない経験が必要なんじゃないか

96 名前:はちみつ餃子 mailto:sage [2021/08/14(土) 11:34:44.96 ID:xM4RG8+9.net]
全部知らなくてもわかる部分だけでまあまあ使えるというのが C++ の方針なので
最初から綺麗に書こうと思わないほうがいいと思う。
綺麗に書けないと考えるより汚くても普通なんだと考えると気が楽でしょ。

97 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 11:41:20.52 ID:HmVXtcJk.net]
構造体の中に関数が書ける、というコアの中のコアな部分の使い方・考え方さえ憶えるというより慣れれば
あと他のは追加で憶えればいいってだけ

ただし、その追加が今とんでもない量になってて
禿本の初版からやってる俺でさえ憶えきれなくてもがいてる

98 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 11:47:19.11 ID:fhp8ilcT.net]
いいかい学生さん、 他人のコードをな、 他人のコードをいつでも読めるくらいになりなよ。
それが、人間えら過ぎもしない貧乏過ぎもしない、 ちょうどいいくらいってとこなんだ。

99 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 13:15:40.19 ID:MjnqNUAd.net]
>>88
エラーが起こったらまだマシだな
イクときはだまってイクからな

100 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 13:23:47.33 ID:sh47n3w4.net]
他人のコードを読んで学ぶのに一番向いてない言語だよなC++は。



101 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 13:48:08.91 ID:fhp8ilcT.net]
オーバーロードが悪いんですよ

102 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 14:19:07.48 ID:EcmTnCEO.net]
>>93
perl に比べたらまだマシ

103 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 17:38:14.88 ID:sh47n3w4.net]
perlは文法が複雑なだけで、知らない書き方に出会ったらそれを調べれば

104 名前:「い。
C++はコードの断片だけ見ても動作を想像できないことがあるから厄介。
[]
[ここ壊れてます]

105 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 18:45:25.98 ID:lbIZmRLc.net]
ぶっちゃけスマートポインターって面倒だよね?

106 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 18:54:41.75 ID:fhp8ilcT.net]
スマポに限らず面倒なテンプレートクラスだらけだよ

107 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 18:56:25.80 ID:fRH2bKcn.net]
ぶっちゃけどんなときに面倒だと感じる?

108 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 19:58:29.67 ID:x6Wgppy9.net]
スマートポインタに慣れたら自分で解放しなきゃならないmallocやnewの方がよっぽど面倒

109 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 20:04:27.45 ID:HmVXtcJk.net]
>>98
クラステンプレートな

110 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 21:41:33.25 ID:fhp8ilcT.net]
autoが便利すぎて反復子の型を明示していたころのC++には戻れそうにない



111 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 22:18:40.56 ID:cML6JT7R.net]
11よりは前は書きたくないね

112 名前:デフォルトの名無しさん [2021/08/15(日) 00:20:00.85 ID:YeWgyy60.net]
QZ案外初心者やなw
でも言ってることは全面的に賛成
ポインタや参照、クラス等の基本を抑えてからでないとスマポや、C++11からの要素(右辺値参照含む)の使い方もわからんと思う

113 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 06:30:24.80 ID:AkVzvB4L.net]
autoもそうだが ->戻り型やusingエイリアスもだね
typedefには戻れない

114 名前:ハノン mailto:sage [2021/08/15(日) 09:34:41.47 .net]
>>103
確かに罰ゲームの一種になるかも‥‥私も少しずつ採り入れていくようになっていますし

>>104
もう永遠の初心者だと思っていますので、ならば、初心者の気持ちがわかるコメントでコントリビュートするのもありかと、ふつふつと

115 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 14:37:33.11 ID:Qb5ISoeo.net]
>>104
なにこれ?


QZ「〜」
名無し「QZ初心者やな。でも賛成」
っていう自演をやろうとしたが、一個目のQZのレスをコテつけ忘れで投稿してしまったのか?
あるいははちみつとQZを同一視している?
いずれにせよとんでもない皮肉だな笑

116 名前:ハノン mailto:sage [2021/08/15(日) 15:29:20.83 .net]
>>107
いちいち反応しなくてもよろしい

>>108
つ鏡

117 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 17:48:49.44 ID:pJ9UilRh.net]
>>107
それ、以前俺が書いたカキコを勝手にコピペされただけだよ

118 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 17:52:57.61 ID:/OoKg6VD.net]
クッソささやかな体面保つためだけの自演も失敗とか本当にみじめないきものだな…

119 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 18:00:11.34 ID:/ZNLC/hj.net]
これか。どういう意図のコピペなんだろうかね。
https://mevius.5ch.net/test/read.cgi/tech/1594615908/595

120 名前:はちみつ餃子 mailto:sage [2021/08/15(日) 18:12:10.32 ID:oR5NZ4bd.net]
>>111
ブラウザが記憶してたのを再度投稿してしまったとかそういうしょうもないミスじゃないかな。
JaneStyle のメモ欄で以前のレス内容を貼り付けたりそのまま投稿できたりする機能があるよ。



121 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 18:15:56.65 ID:pJ9UilRh.net]
だから勝手にコピペされたっつってんだろクソ餃子め
>>104は俺じゃないから
3行目を引用したかったのか変な自演したかったのかは知らん

122 名前:はちみつ餃子 mailto:sage [2021/08/15(日) 18:21:10.51 ID:oR5NZ4bd.net]
>>113
すまぬ。
本人によるものでなくてもなんらかの意図でメモしてたものを
うっかりということは起こりそうなデザインにはなっているので、
意図によるものでなくただのミスじゃねという部分が主旨。

123 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 18:25:05.27 ID:pJ9UilRh.net]
(´・ω・`)そうか

124 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 15:03:34.95 ID:Gh+OcB3l.net]
>>107
なんで突然はちみつ?

125 名前:はちみつ餃子 mailto:sage [2021/08/16(月) 15:17:56.99 ID:5E5Krdno.net]
>>116
現時点でこのスレにコテ (+トリップ) 付きで書き込んでいるのがはちみつ餃子と QZ だけだからだろ。

126 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 19:18:38.03 ID:QgSHgEhC.net]
(unsigned) intの数を受けたら何らかの演算をして (unsigned) long longの数を返す、(unsigned) double の数を受けたら何らかの演算をして (unsigned) long double の数を返す、みたいのって逐一オーバーロードを書くしかないですよね?
要するに、大きいデータ型に格上げして何らかの演算をして返したいってことなんですが

127 名前:ハノン mailto:sage [2021/08/16(月) 19:34:40.64 .net]
>>118
演算子のオーバーロードにしても関数のオーバーロードにしても、返り値の型を指定することは出来なかったかと
思いつくのは演算前の引数にあてがうキャストのオーバーロードですね

128 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 19:55:44.02 ID:AiYiQHL1.net]
引数をテンプレートにして、引数Tのビット数と整数型かどうかを見て、一段階大きい型を戻り値の型とすることは出来る

129 名前:ハノン mailto:sage [2021/08/16(月) 20:16:27.49 .net]
>>120
pls kwsk

>>119 普通にコンストラクタのほうがいいですか‥

130 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 21:59:33.60 ID:AiYiQHL1.net]
ごめん、めんどい・・というか
sizeof(T)と整数or浮動小数点数のbool(is_integralとかで取る)を受け取る構造体の中でtype(戻り値の型)を定義、とか考えてたけど
結局Tのサイズごとに特殊化するから手間変わらん、てのと
関数の中身が長くなるなら、オーバーロードした関数からテンプレート版(戻り値の型と引数の型がテンプレート)を呼んで、そこで中身書けば一回で済むね



131 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 23:40:17.97 ID:cwTPPWgm.net]
>>118
ふつうに long long や long double を引数で受け取るって演算して返す関数を書けば
その通りの動作になりそうなんだけど、何か気に入らないの?
2つ関数書くのが嫌だってこと?(やりたいことが少なくとも2通りあるのに?)

132 名前:はちみつ餃子 mailto:sage [2021/08/17(火) 00:20:49.88 ID:yPn/BtRt.net]
大きい型というのは一段階大きい型という意味なのかな?
型の大きさは処理系 (アーキテクチャ) 依存だし、
ポータブルに書こうと思ったら思ったよりも面倒な感じ。

主要なアーキテクチャだけ対処できればいいなら
8 → 16 → 32 → 64
の拡張が出来ればいいので用意するパターンはそんなに多くはない。

ちなみに Windows の long double は double と同じ大きさだよ。

133 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 02:08:49.72 ID:rNAqXouz.net]
何種類か関数があるならtraitsを作成するのもありじゃない?

134 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 04:11:58.97 ID:ReVsRUuR.net]
関数読んだら1段階デカい型が返ってくるなんて使う側でも面倒が起きそうだな

135 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 04:23:43.76 ID:TZ94eDdV.net]
まぁ、戻り値にも使用できるテンプレートの追加の型を関数内でconstexpr的に定義出来たらいろいろ面白いことが出来そうではあるなw

136 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 15:14:48.98 ID:9cCAU3aU.net]
話は勝手に変わるけど、
{ 1,2,3,4,5 }
のような書き方が initializer_list になる場合とならない場合を全て知りたいけど
良く分からないので、誰か教えてくれまいか。

137 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 15:21:14.80 ID:9cCAU3aU.net]
>>128
的を外しているかも知れないけど、その書き方をAと書くとすると、どんな文脈でも
A自体が最初に必ずいったん initializer_list<T> になった後にそれぞれの文脈で処理されるという
ことなのか、あるいは、
auto x {・・・};
auto x = {・・・};
auto x = TYPE {・・・};
func({・・・});
のようにいろいろな書き方や文脈が変わるとそもそも A は意味論的にすら
initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される
のか、どちらなんだろう????

138 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 15:24:22.53 ID:9cCAU3aU.net]
あと、良く分からないのが、
struct CPerson {
・・・
CPerson(int a, int b, int c) {・・・} //(1)
};
とあった場合、
1. CPerson a{1,2,3};
2. CPerson a={1,2,3};
3. CPerson a=CPerson{1,2,3};
のどれを書いても多分、(1)が呼び出される気がするけど、
struct CPerson {
・・・
CPerson(initializer_list<int> a) {・・・} //(2)
};
と書いた場合、1,2,3 はやはり全て(2)が呼び出されるのだろうか?

139 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 16:38:31.07 ID:z/GAGLjl.net]
>>129
> initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される

initializer_list を経由しないことはある。
おおざっぱには initializer_list を受け取る文脈では initializer_list だし、
推論が必要なとき (auto やテンプレート) にも initializer_list に推論されるが、
そうでないときは initializer_list を経由しない。

140 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 16:48:40.83 ID:z/GAGLjl.net]
>>130
優先順位がある。
1. 2. 3. のいずれも initializer_list としての解釈が「優先される」。
initializer_list を受け取るコンストラクタが存在しなければ
三引数のコンストラクタが呼出される。



141 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 16:54:44.67 ID:9cCAU3aU.net]
>>132
なるほど。確認だけど、
1. CPerson a{1,2,3};
2. CPerson a={1,2,3};
3. CPerson a=CPerson{1,2,3};
4. CPerson a(1,2,3);
5. CPerson a=CPerson(1,2,3);
は、どれも3引数のコンストラクタで受け取ることは可能ということでOk?
1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能?
4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??

142 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:08:54.15 ID:z/GAGLjl.net]
>>133
(initializer_list を受け取るコンストラクタが無ければ) いずれも 3 引数のコンストラクタが起動されるが、
5. は 3 引数のコンストラクタでオブジェクトを構築した上で a にコピーする。
(コピーコンストラクタ、またはムーブコンストラクタが起動する。)
ただし RVO が有効な状況ではコピーやムーブはが省略されるので 5. は 4. と同じ。

そしてこの場合には関係ないが、波括弧によるコンストラクタ起動では引数の暗黙の型変換を許さない
といった重要な違いがある。

(initializer_list を受け取るコンストラクタが有る状況でも) 4. と 5. は initializer_list とは解釈されない。

143 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:14:28.81 ID:9cCAU3aU.net]
>>134
1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能?
4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??
については?

144 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:19:50.55 ID:z/GAGLjl.net]
>>135
それが区別できるだけのルールは既に提示したつもり。

145 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:21:53.70 ID:9cCAU3aU.net]
>>136
すまん。もう一度明言してくれるとありがたい。

146 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:27:44.09 ID:td+NCu9W.net]
template <int N> void test(std::bitset<N>& arg);

int main()
{
std::bitset<1ull> lvalue;
test(lvalue);
}

これ、Nが推定できないのはなんで?

147 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:28:31.68 ID:td+NCu9W.net]
すまん、自己解決
unsigned long long Nが正解だった

148 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:30:02.71 ID:z/GAGLjl.net]
>>135
> 1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能?
はい。 可能です。

> 4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??
はい。 不可能です。

ところで >>134 で、オブジェクトを構築した上でコピーするのは 5. と述べたけど 3. もそうやな。

149 名前:はちみつ餃子 mailto:sage [2021/08/19(木) 17:33:59.90 ID:z/GAGLjl.net]
>>138-139
正解は size_t だよ。
size_t が具体的にどの整数型に対応するかは処理系定義なので
もちろん unsigned long long と等価なこともあるだろうけど。

150 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 17:40:36.29 ID:9cCAU3aU.net]
>>136
念のため、その「述べた」はずのルールがどの文章だったのか教えてもらえれば
ありがたい。



151 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 22:54:32.78 ID:CH0dz2ka.net]
vector<long long>を取る関数にvector<int>を渡すと、その引数はvector<long long>にキャストされる
で、vector<int>を取る関数にvector<long long>を渡すのはNG

この理解は合ってますでしょうか

152 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 23:03:24.64 ID:/B0HDd6y.net]
間違ってる
vector<long long>とvector<int>には何の関係もない
intとstringに関係がないのと同じくらい関係ない

153 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 11:13:55.26 ID:5K/SmrCp.net]
pair<int, int> は pair<long long, long long>にキャストできるけど
vectorにそういうコンストラクタはないな

154 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 12:13:09.91 ID:ssGfr3Zr.net]
>>103
VS6.0の頃は地獄だったよ
forループの変数は生キノコるわ例外出たら自動変数の破棄全部ぶっ飛ばすわでMSはクソの集大成だと確信していたわ

155 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 12:42:32.36 ID:5K/SmrCp.net]
例外処理が2系統、数え方によっては3系統あるのがね

156 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 15:19:34.50 ID:Pb4opnB5.net]
STOUT を STDOUT に空目してこそプログラマ脳


「ミロ」そっくりの缶ビール 子どもが誤飲し販売禁止に(豪) - Yahoo! JAPAN
https://article.yahoo.co.jp/detail/1a7b2e0b9ab108ebf156f22e654f60634c39c88b
子どものみならず大人にも大人気のココア味の麦芽飲料「ミロ」は、世界中で愛されている。このほどオーストラリアの企業が、
ミロにそっくりのパッケージデザインで缶ビールを製造したことにより「子どもが間違えて飲んでしまった」という苦情が届いた。
これにより同製品の広告使用禁止が言い渡されたことを『news.com.au』などが伝えている。
問題の缶ビールは、豪ビクトリア州にある企業「Howler Brewing Company」の「Chocolate Milk Stout」というチョコレート風味の黒ビールだ。
缶のデザインは有名な麦芽飲料「ミロ」を真似たもので、お馴染みの緑色を背景に製品名や販売会社を示す文字の色やフォントまで同じデザインとなっている。
同社はこれまでにも、Instagramや炭酸飲料「スプライト」など認知度の高いロゴデザインを真似た製品を作り出している。

157 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 17:52:50.79 ID:BMARPdQo.net]
関数オブジェクトじゃなくて関数を記述するメリットってなんかある?
テンプレートは近々関数オブジェクトの方でも使えるようになるんでしょ?

158 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 19:08:22.19 ID:n19OoAH+.net]
>>149
タイプ数が少ない、くらいかね。

159 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 20:12:20.52 ID:BMARPdQo.net]
>>150
じゃあそのうち「関数はレガシーな書き方なので関数オブジェクトを使用するようにしましょう」とか言われるようになるの?

160 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 00:32:59.41 ID:E2GGZp0E.net]
>>149
複数の関数から呼ばれる関数どうすんのさ
グローバル変数や引数にいちいち入れるの?



161 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 00:37:37.24 ID:E2GGZp0E.net]
>>146
forの変数スコープは回避策あったやん
98年発売なんでもうちょっとどうにか出来たのではとも思うが

162 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 00:45:38.19 ID:E2GGZp0E.net]
あ、すまんラムダじゃなくて関数オブジェクトか
確かにタイプ数くらいしか思いつかんけど
テンプレートは既に使えるのでは?関数テンプレートに出来て関数オブジェクトに出来ないテンプレートの使い方あったっけ

163 名前:デフォルトの名無しさん [2021/08/21(土) 10:46:43.63 ID:+K/WXdke.net]
>>148
日本でも煙草を真似したデザインのチョコレート菓子があったけど
間違って煙草食った子供が死んだとか裁判になったとか聴かないな
おそらくあったんだろうな

164 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 12:15:51.53 ID:t0h3aTQf.net]
>>154
実体化の制御かね。
関数テンプレートは使用されない限りエラーにならない。
SFINAEもそうじゃなかったっけ?

165 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 13:42:38.53 ID:E2GGZp0E.net]
クラステンプレート内の普通のoperator ()だとそうだね
operator ()がテンプレートの場合ならほぼ関数テンプレートと同じ事出来るとは思うけど
文法上、明示的にテンプレート引数指定する際、関数と共通の書き方には出来ないな・・

166 名前:デフォルトの名無しさん [2021/08/21(土) 20:47:50.56 ID:7GAoG1Iq.net]
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています

Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しでView types参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
nim-lang.github.io/Nim/manual_experimental.html


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、Cのソースコードを吐き出せるのでC言語でリモートワークされ
ている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます

167 名前:デフォルトの名無しさん [2021/08/21(土) 22:35:53.53 ID:o/sUihIV.net]
質問です。
std::array ary = { 1, 2 };

↑の{}で初期化すると、
要素数を自動推論できるようにするにはどう実装すればいいんでしょう?

168 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 22:55:48.18 ID:+FOhqLVw.net]
推論補助だと思う

https://cpprefjp.github.io/reference/array/array/op_deduction_guide.html

169 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 01:17:33.04 ID:maGRuunL.net]
>>155
食ったところで飲みこまずにペッペッて吐き出すだろ

170 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 04:31:26.04 ID:Roj0wExz.net]
g++ -std=c++17



171 名前:デフォルトの名無しさん [2021/08/22(日) 12:59:29.57 ID:0Cz6ueFz.net]
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています

Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴 バージョン1.5.1
nim-lang.github.io/Nim/manual_experimental.html

第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます

172 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 18:45:30.76 ID:gNvESTNy.net]
std::chrono::time_point::time_since_epoch()が返すエポックタイムの原点はいつですか?
もし具体的に規定されていないとしても、
ミリ秒パートが0であることは保証されていますか?

173 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 19:20:25.99 ID:gNvESTNy.net]
ある意味自己解決しますたorz
https://cpprefjp.github.io/reference/chrono/system_clock.html
>C++17 以前の場合、system_clock のエポックがどの時間を指しているかは未規定だが、ほとんどの処理系は UNIX 時間(1970年1月1日0時0分0秒)を指している
>C++20 以降の場合、system_clock のエポックは必ず UNIX 時間(1970年1月1日0時0分0秒)を指す
しかし(特にC++17以前において)ミリ秒パートが0が保証されているのかどうかがはっきりしませんぬ、

174 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 19:28:39.82 ID:VeL/IzCV.net]
生年月日をUNIX時間で表現できないオッサンはこのスレにどのくらいいるの?

175 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 21:27:04.43 ID:gNvESTNy.net]
生年月日ならミリ秒まで言える必要は無いが
ログの時刻を極力正確に(WindowsのGetLocalTime()と同じ時刻で)記録したいのでつ∀`;)

176 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 04:13:32.16 ID:F733kpwr.net]
1970年以前生まれの50代以上のオッサン

177 名前:デフォルトの名無しさん [2021/08/23(月) 16:50:49.24 ID:Rrt4HCug.net]
B.C.
A.D.
B.E.

178 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:05:26.78 ID:xWEF4I0D.net]
B.E.って何ですか
UCとSEとかRCとかじゃないの

179 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:52:48.51 ID:xWEF4I0D.net]
ていうかsystem_clockはC++17以前からtime_tと相互変換できるのに(system_clock::from_time_t()、system_clock::to_time_t())、
エポックがどの時間を指しているかは未規定とかおかしくね↑?

180 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 23:20:43.35 ID:AuTnTHJo.net]
別におかしくない
変換時にエポックの差の分ずらせばいいだけだろ



181 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 23:31:13.03 ID:sPTJEjpv.net]
そんなことよりなんでtime_tは符号なしなん?
64bit拡張するときに符号ありにしとけば166みたいな煽りを受けずにすんだのに

182 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 00:03:00.26 ID:24MephMZ.net]
符号なし使うのは総じてセンスないよね

183 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 07:17:43.25 ID:NEyNeI43.net]
符号付き整数はwrap aroundしたときの挙動が処理系依存か何かだったはず……
ハードウェア例外を生じるやつがあるらしい

184 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 07:52:57.66 ID:4Ohx7QuI.net]
>>173
純粋にプログラミングスキルの話と受け取った>>167に謝れ

185 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 08:21:39.19 ID:NErefsYh.net]
>>175
オーバーフローしたときにラップアラウンドさせる使い方が数値計算としては特殊だからねぇ。

186 名前:デフォルトの名無しさん [2021/08/24(火) 15:27:02.85 ID:WZMj7UxV.net]
>>167
ntp使え

187 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 17:48:36.53 ID:DexxKsi1.net]
>>174
time_tを符号なしにしたやつはアフォだと思うが
それをもって符号なしを使うやつ全員が例外なくアフォというのは
早まった一般化という誤謬だ

188 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 22:08:27.39 ID:OPjw/0cg.net]
>>160
なるほど!ありがとうございます

189 名前:167 mailto:sage [2021/08/25(水) 00:50:22.37 ID:MXKFEwSS.net]
そういやーまだご存命の方もいらっしゃるんでしたね

>>179
符号付きにしたら2038年問題が2004年問題になってた
人類は間に合わなかった

190 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 07:34:23.44 ID:VHSVWUHA.net]
30年も猶予があったのにな



191 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 10:43:26.33 ID:M5WZn8fZ.net]
ヒトラー「2036年、人類と云われる者は居なくなっている」

192 名前:デフォルトの名無しさん [2021/08/26(木) 16:49:35.75 ID:WPRv8+9f.net]
関東大震災だって100年も猶予があっても何もしない國ですし

193 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 21:09:02.54 ID:xnTAPql6.net]
色々やってるぞ
庶民を助ける政策をやってないだけで

194 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 17:50:19.96 ID:BFKMFKNN.net]
https://twitter.com/cpp_akira/status/1430779310885859330
最近はC++の発表資料を公開すると「Rustでいいじゃん」というコメントがたくさんつくのか…。
Rustへの言及とか一文字も書いて

195 名前:ネいのに。
普及活動だと思うけど、さすがに嫌がらせチックに見える。

https://twitter.com/moriyoshit/status/1430795812552863744
C++の件に限らず、旧来からある言語の長所短所を理解せずに、
表面的に新言語を推す発言を見ると、
果たして当人は新しい言語の方も理解できているのだろうか、
という疑念をもってしまう...
(deleted an unsolicited ad)
[]
[ここ壊れてます]

196 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 19:27:10.45 ID:wbifwX7a.net]
>>186
Rustはいらんけど、制約を強化してコンパイルエラーを増やしたc++--は欲しいなぁ。

スライシングはすべてコンパイルエラー、ダウンキャストはメンバー関数とフレンド関数のみ使用可能
new deleteはメンバー関数とフレンド関数のみ使用可能(global operator new/deleteは廃止)
といったメモリ周りの制約強化は欲しい。

197 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:03:18.97 ID:dCOU+NEa.net]
Rustを使って欲しいなら、そう言えばいいのに
人のすることを小馬鹿にするような態度で来るから敵と見られるんだよ
コミュ障にも程がある

198 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 18:35:03.00 ID:iJLWqDs6.net]
インテルコンパイラの-fastには-staticが含まれてるけど、なんでスタティックリンクは速いの?

199 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 18:49:01.71 ID:Ovc44+68.net]
ライブラリ使うときのロードの手間がなくなるからね

200 名前:はちみつ餃子 mailto:sage [2021/08/28(土) 23:41:54.59 ID:V8MBAFoh.net]
スタティックリンクにすると最適化の情報が増えるというのもあると思う。

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

今では LTO が当たり前になって、リンク時にあらためてコンパイラに戻して最適化
させる仕組みがあるんだけど、バイナリ自体が別物だとその仕組みを使えない。



201 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:13:16.45 ID:h29TClHM.net]
std::threadってスタックサイズを指定できないってマジ?
仮想メモリを使えない組み込み用途だとどうすんじゃ……

202 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:20:14.34 ID:kSqJuAzn.net]
native_handle()関数で環境に応じたスレッドハンドル(linuxならpthread)を取得できるから、スタックサイズを設定するところだけ環境ごとに用意して切り替えればいいよ

203 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:28:41.66 ID:h29TClHM.net]
Windowsみたいにスレッドハンドルを生成したときはスタックサイズ指定済のとき、みたいな
組み込み用OSがあったらどうすんじゃ……

204 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:46:08.60 ID:h29TClHM.net]
とわいえμITRONのcre_tsk()は
>cre_tsk でスタック領域を明示しない場合のタスクのスタックや割込みハンドラ/割込みサー
>ビスルーチンのスタックは、OS が用意する「スタック用メモリ」から割り当てられます。
>スタック用メモリのサイズを定義する STKMSZ の標準値は 0 で、この場合、main 関数が使って
>いる処理系のデフォルトのスタック領域(スタックセクション)を、OS のスタック用メモリとし
>ます。この場合の実際のスタックサイズは、リンカでのセクション設定とスタートアップルー
>チンでの初期スタックポインタ値で決まります。
みたいなことが書いてある
C/C++界隈はみんな頭おかしい……

205 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:55:46.65 ID:h29TClHM.net]
ゴメ勘違いcre_tsk()(IDがOSが自動割り当てのやつはacre_tsk())は
第2引数に与えるT_CTSK構造体でタスクごとにスタックサイズを指定できたわ;;;
なんでstd::threadではできないんじゃ……

206 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:18:20.52 ID:vSvS+48a.net]
コイツ前スレでも連レスしてたムーブ全く理解してないバカだよね?
NGしたいからトリップつけてください

207 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:25:04.60 ID:x8xWTwL3.net]
>>192
標準じゃ無理でしょ
全てのスレッドを変えたいならリンカのオプションとかで指摘できる環境もあるけど

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

>>193
native_handle()関数でハンドル取れると言う事はスレッド開始してる
開始済みスレッドのスタックサイズを変えられる環境って聞いたことない

208 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:30:52.45 ID:AWkeWwKB.net]
>>196
ほんと組み込み屋は馬鹿だな

209 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:52:45.64 ID:h29TClHM.net]
>>197
完璧な理解をサンプルコード付きで示したやろうが;;;

論点はなんでムーブに置き換えられるケース(明示的にstd::move()したら明らかに効率的なコードになる
において最適化でムーブにならないのか?なのだが高度すぎるのか文盲か故に>>197が付いてこれていないだけ
>>197はブーメラン

210 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:54:56.72 ID:h29TClHM.net]
もっとも天才の漏れは答えにたどりついたがな
ムーブコンの実装がコピコンの実装より効率的である保証が無い以上、
置き換え可能なケースであってもコピコンからムーブコンへの機械的置き換えは正当化されない



211 名前:デフォルトの名無しさん [2021/08/30(月) 14:34:41.72 ID:jKIf8Vzq.net]
天才のインフレ

212 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 16:43:13.53 ID:Uxp79PtR.net]
Rustみたいにコンパイル時にいちいち参照のチェックするんじゃなくて
C++で最終的に完成したバイナリに対してメモリサニタイザーを一回動かす
ってのではだめな理由ある?

213 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 20:16:57.41 ID:dG55Jwur.net]
>>203 動かしたフロー以外のフローについて不安が残るし、サニタイザーの精度がどれほどかという問題もありそう。

214 名前:はちみつ餃子 mailto:sage [2021/09/01(水) 23:35:30.93 ID:3mB0e8fG.net]
>>203
ものによって賢さの程度が違うから一概には言えないけど
基本的にはサニタイザは実際に起こった問題を検出するものなので
入力値次第で問題が有ったりなかったりするようなケースを検出できなかったり、
言語仕様上で未定義なものがたまたま問題ないアクセスになってしまうようなケースも
検出できないかもしれない。

問題が起こっていて再現条件が分かっているときに検証するツール、つまりデバッグ用のツール
としてはサニタイザは有用だし、ごく基本的なテストツールとしても使えるけど、
Rust のライフタイムチェックほど網羅的ではない。

215 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 05:18:49.53 ID:90/tsZBA.net]
一言でまとめると動的試験てことだな

216 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 09:16:16.79 ID:6YHhlfzl.net]
MozillaのFireFoxの場合、わざとクラッカーがセキュリティーホールを見つけ出して
そこを付いてくるから、普段の実行テストでは一度も発見できなかった
メモリーバグが問題になるが、普通のアプリの場合、ユーザーがわざとバグを
付くことはないから、そのようなホールはあまり関係ないと思う。
テスト駆動開発とかアジャイル開発とかも、普段使いで問題が無いかをテスト
することで大部分のバグが無い状態で開発していこうとする考え方。
それでもほとんどのメモリーバグは無い状態になっている。
メモリーバグがあると、普段使い的なテストをしても発覚することが多いから。
昔から言われているメモリーバグの問題点は、再現性が有る場合でも、バグが
ある行とそれが発覚した時期とがずれていることがあるから。
デバッグモードでコンパイラが自動的にチェックするコードを入れていれば、
それはなくなるはず。
Rustはその意味で、経験法則的にFireFoxみたいな特殊なものでは意味があるが
一般アプリでは余り意味が無い。ブラウザの特殊性は、世界中のクラッカーが
セキュリティーホールを探してわざとその穴を付いてくること。一般アプリでは
それがないので、隠れたバグは隠れたままになっていることが多くて、
テストで出てこなかったバグは実際問題的には余り問題となら無い事が多い。

217 名前:デフォルトの名無しさん [2021/09/03(金) 09:22:40.61 ID:6YHhlfzl.net]
>>207
例えば、ダングリングポインタ(Use After Free)は、ptrがどこかでまだ使用中なのに、
free(ptr)としてしまうこと。しかし、そのfree()をした時点ではアプリはダウン
しないし、ptrに対して読み書きした段階でもまだ発覚せず、ptrが指すメモリー
アドレスを別の目的で使用してしまって、お互いに読み書きがある種の干渉を
起こしてしまって、データがめちゃくちゃになり、それによってどこかで不具合
が生じた時点で発覚する。
なので、バグの根本原因であるfree(ptr)を実行した行がどこかを探し出しにくいと
される。
しかし、このバグの場所とバグが起きた場所のずれは、デバッグビルド時に速度を
落としてチェックすれば本当は防げるはず。

218 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 09:24:49.55 ID:6YHhlfzl.net]
>>208
チェックと言っても人間が手で書く必要は無く、コンパイラがチェックコードを
自動生成できるはず。

219 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:00:52.25 ID:yL2Kwy6+.net]
根拠のない決めつけばかりで気持ち悪い。

220 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:16:16.17 ID:lmzB7IZ6.net]
>>207
世の中にはテスターという職種の人がいてだな



221 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:46:20.27 ID:yJUEU9nq.net]
>>207
任意のファイルを読むアプリはファイルのパーサーの脆弱性をついてユーザ権限でコードを実行される可能性がある
どちらかと言えばアプリよりサーバとしてアクセスを受け付けているプログラムの脆弱性をつかれて攻撃コードの実行を許してしまうことが多い
さらに上のような場合でも、アプリやサーバのプログラム自体に脆弱性があるのではなく、使用しているOSのAPI側の実装の脆弱性をつかれる可能性がある

こういうアプリやサーバやOSのコードの脆弱性にMSやGoogleは悩まされている

222 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:00:44.84 ID:yJUEU9nq.net]
Valgrind と言う動的解析ツールを調べて見るといい
うちはC++のプログラムは基本これを通すことになってる
商用ならもっといいツールもあるかも知れない
そういうのを利用しても充分でないから静的解析するRustが注目されている

223 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:27:43.59 ID:6Xh4x7Us.net]
商用の静的解析ツール使ってると、正直メモリ関係のバグなんてありえないと思えるくらいいろいろ見つけてくれるよ

224 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:44:23.16 ID:9y+1HwQb.net]
コンパイル時間に糸目を付けなければ、静的解析はもっと出来る。

225 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:47:10.63 ID:lmzB7IZ6.net]
> メモリ関係のバグなんてありえないと思える

lintの副作用がモロに出てるなw

226 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 15:20:21.54 ID:MvVz2a9W.net]
言うまでもない事だが完璧なメモリチェッカーは存在し得ない
停止問題と同値だからな

227 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 15:50:45.07 ID:6Xh4x7Us.net]
完璧無理っておまえの毛髪の量がプログラム停止に与える影響が読めないとかそういう話だろ?
限定的な範囲で正しけりゃ十分だよ

228 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 16:54:40.55 ID:lmzB7IZ6.net]
ゴールポストは動かしちゃダメだよ

229 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:38:29.50 ID:6Xh4x7Us.net]
無限遠のゴールを設定するのはアホだべ

230 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:51:18.36 ID:xmwLNRYX.net]
スクリプト言語も普通にクラッシュ



231 名前:することあるから []
[ここ壊れてます]

232 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:52:37.20 ID:xmwLNRYX.net]
OSのコアダンプ出力とリブートに救われる手のひらの孫悟空

233 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 18:28:35.67 ID:iCLUv6gH.net]
rustでもメモリアロケーション失敗するとパニックになる、てリーナスが突っ込んでいたろ。
c++の場合はどうなんのかな。

234 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 20:13:28.89 ID:USKNPKWa.net]
CoverityとVectorCASTは使ったことあるけど検知レベル最高にしても見逃すリークや二重フリー, ダングリングはそれなりにある (そもそもコードの構造が悪い場合も多いが)
検知レベル上げ過ぎると逆にFalse Positiveも増えるし

235 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 07:59:49.00 ID:kFVsNuY8.net]
無限遠のゴールポストを動かすって
こいつ文系か?

236 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 08:08:40.61 ID:N/QuNfWR.net]
まあ見つからないのは間違いなく書き方が悪いよな

237 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 19:04:52.86 ID:7+pvijvQ.net]
∞の概念が理解できるならそいつはもう文系ではあるまい

238 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 19:11:19.50 ID:ICKB9ww0.net]
ε-N論法

239 名前:デフォルトの名無しさん [2021/09/04(土) 22:28:42.31 ID:mLTAxmCN.net]
超久しぶりにC++の参考書 買った。
いまってC++20までいってるんでしょ?

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


ただ読む気がおきない。
「pythonでいいか」って思いが・・・ww

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

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

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

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

言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。



241 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 00:05:05.82 ID:yIsM5ONG.net]
バカが使いこなせる言語ではないからな

242 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 00:27:52.33 ID:eMsTCIh+.net]
linusに言われると返す言葉もないが、その後の文脈にある

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

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

な感じでC++を気に入って、夢を見ていたいんだろうね。

243 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 00:53:47.56 ID:66hkUr5p.net]
「オレはC++を使いこなせている」と思い込む素人を生温かく見守るスレはここですね

244 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 01:42:41.34 ID:eMsTCIh+.net]
>>223
https://lkml.org/lkml/2021/4/14/1099
コレのことだと思うけど、どういうケースを想定しているの?

245 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 06:00:11.76 ID:fsFc+8nQ.net]
昔、バカでも使える言語でプログラマ人口増やしましょうてなことやってたな
BASICじゃないぞ、あれは初心者用で、バカ用じゃない

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

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

C++はアレの逆をいっているわけだ

246 名前:デフォルトの名無しさん [2021/09/05(日) 06:45:24.37 ID:ClPlKiJv.net]
Qtを使ってるから、C++一択だな。

247 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 12:24:02.01 ID:cBh+EO/A.net]
namespaceと多態性はCだけではやりにくい

248 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 12:47:17.91 ID:0Cj96kG7.net]
静的なディスパッチの充実がCに必要なのではないか

249 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 14:17:57.22 ID:cBh+EO/A.net]
>>234
Linuxはモノリシックカーネルなので動的メモリ確保を伴うような軟弱な
モジュールもカーネルのうちに入ってしまっているからメモリ不足ぐらいで
パニくられると手の打ちようがないから困るという話なんじゃないの(適当

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

※ 個人の感想です

250 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 14:38:48.42 ID:eMsTCIh+.net]
>>239
具体的に何かのケースを想定して言ってるわけじゃないのか。
ぶっちゃけOSをC++で書くならカーネルでnew/malloc/mmapとか使う実装はしないだろうし、処理系が使うランタイムにも依存するけど基本その辺はカスタマイズできるようになってると思う。
rustでもそんな感じで処理系次第って話だと思う。



251 名前:デフォルトの名無しさん [2021/09/05(日) 14:44:00.68 ID:LgQhIBwq.net]
>>230
馬鹿除けのために C++ じゃなくてあえて C を使うのは良いね
https://www.youtube.com/watch?v=TkyGdUg_XlA

252 名前:ハノン mailto:sage [2021/09/05(日) 17:28:18.83 .net]
>>241
>>230 の類の話は昔からいわれていたもので、これも有名ですね
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」という言葉は、プロジェクト管理者の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。

253 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 17:47:40.38 ID:eWmYSwWp.net]
>>242
とっくに否定済みのデマを貼るな
www.stroustrup.com/bs_faq.html#IEEE

254 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:05:24.16 ID:Lkm6/1Sl.net]
https://ideone.com/fHH1N4
これが、シングルトンとして抜けている理由を教えて下し亜。
コードのストックにするために書いたのですが、そもそもシングルトンってなんでしたっけ?

255 名前:ハノン mailto:sage [2021/09/05(日) 18:06:53.16 .net]
>>243
誰が書いたかなどどうでもよく、その内容についてはどう思いますか?

256 名前:はちみつ餃子 mailto:sage [2021/09/05(日) 18:10:26.36 ID:vh6AiUnJ.net]
>>244
関数テンプレートが結果的に引数の数が違う関数として展開される。
引数の数の違いが結果の違い。

257 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:23:29.28 ID:cBh+EO/A.net]
>static std::shared_ptr<T> O = std::make_shared<T>(A...);
の部分って、Singleton()の初回呼び出しが複数のスレッドから同時に起こってもき
ちんと排他してくれるんでした
っけ

また排他してくれるとしても最速(そのアーキテクチャ(マルチコアかもしれない)で最も適切)
であることを気体していいんでしたっけ……
つまり生成に成功した後は排他不要なわけで、無駄にロックを取りに行きたくない……

258 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:24:18.83 ID:yIsM5ONG.net]
>>242
おまえホント頭悪いな

259 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:27:31.03 ID:cBh+EO/A.net]
みたいな配慮がシングルトンにしたとたんに必要になる
メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、

260 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:28:54.12 ID:0Cj96kG7.net]
>>247
呼ばれたところで最後の奴が勝てば問題ないのでは



261 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:47:53.68 ID:cBh+EO/A.net]
>>250
ある
>static std::shared_ptr<T> O = std::make_shared<T>(A...);
全体が排他されないとしたら、Oの生成関数(初期化式「O=」の右辺)が複数回、
それも同期的に繰り返し呼ばれるのではなく、非同期的に再入される形で呼ばれかねない
生成関数の中でリソース確保するとしたら先の呼び出しで確保したリソースの
ハンドルがdunglingにならないように配慮が必要になる
非同期的再入ということは、Oが生成→破棄→生成→破棄、にならず、
生成→生成→破棄→破棄になりかねないから、デストラクタをちゃんと書いたらリークしないとか
そういう認識で当たったらバグる
問題山積や

メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、

262 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:50:05.34 ID:nyuo1Vq1.net]
>>245
お前の質問なんかどうでもいいからデマを貼るな

263 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 19:08:04.86 ID:UYU4AxET.net]
>>247 https://timsong-cpp.github.io/cppwp/n4861/stmt.dcl#4

264 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 19:10:36.36 ID:2jP3+tuQ.net]
>>246を踏まえるとこんな感じか
関数テンプレートだけで済ます方法はあるのかな?

https://ideone.com/kmIimz

265 名前:ハノン mailto:sage [2021/09/05(日) 21:38:19.52 .net]
>>248
はい、頭も性格も悪いと思います、しかし >>242 の中のどういうところが悪いとお考えになったのか教えていただくと嬉しいです!!

266 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:21:15.62 ID:TAzC3d8r.net]
>>255
そもそも、C++の生みの親で、それに関する書籍を出してその中でC++を
良い言語と自負して(それ以上の言語が出来ないというような主張も幾度もして)
解説し、まだ推進しようとしている人が、C++を徹底的に卑下するかどうかを
疑問に思ってないことも頭が悪いと思われる原因の一つ。

267 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:29:24.50 ID:15q7gB85.net]
実際、C++は、特に初期の頃はCより全面的に優れていると誰でも思えるような
物であって、ちゃんと世界的に認められて広まっていたのに、その部分まで
全否定するようなことをインタビューで答えるわけがない。
その後に追加されて機能は人により評価が分かれて全面的に優れているとは
思えるようなものではなくなっていた。
だから、C++11は、好きな人も居れば嫌いな人も居る。C++98より全面的に
優れていると言えるかどうかは人により評価が分かれるので、好みにより
文壇の様なものが生じている。

268 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:30:49.67 ID:cBh+EO/A.net]
>>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の糞コードは直しても仕方が無い

269 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:36:38.84 ID:66hkUr5p.net]
メモリを自動解放するfinally機能さえあればCでも大丈夫とは思う

270 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:50:33.49 ID:yIsM5ONG.net]
https://imgur.com/aX1iNMp.jpg



271 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:52:01.95 ID:cBh+EO/A.net]
とオモタがcontrol enters the declaration concurrently のときは初期化のcompletionまでshall waitで、
ただしrecursivelyだとイカン(未定義動作)と書いてあるのか……
つまりSingleton()関数内の初期化式「O=」の右辺がSingleton()を呼び出す場合か

まあ確かにWindousみたいに特殊な仕様のクリティカルセクションでもない限りデッドロックしそう

272 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 23:09:38.17 ID:eTOvJaZ9.net]
>>251
そうか
まあ仕様的にはスレッドセーフだわ
関係ないけど参照したグローバル変数に値が入っとらんで困ったことがあった

273 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 00:30:26.82 ID:62gS+LUW.net]
>>258
なんかスレッド安全性の問題にしたいようだけど、
そもそも>>244の第一の問題点は2番目のSingletonの呼び出しだけ別のオブジェクトを指してしまっている点だよ
stdoutの2行目だけ0になってるだろ?
その原因の説明が>>246というわけだ

すべての関数・クラスを最初からスレッドセーフな設計にしないといけないわけじゃない

274 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 04:31:29.75 ID:HRRCwLhx.net]
>>263
>>258じゃないし、よく分からないけど
https://ideone.com/69FQhL
ではダメなの?

275 名前:デフォルトの名無しさん [2021/09/06(月) 04:31:59.38 ID:G2BRvA3h.net]
ビャーネ・ストロヴストルップその人のインタビューだとは私も考えてませんよ、これはブラックジョークというべきでしょう、まあC++er が気を悪くする理由は理解できますが
それに私も GNU Multi-Precision Library を使うときはC++のラッパの方を使います。C インターフェースの方は使い難くって使い難くって、これはもう罰ゲームですね‥‥
だから演算子のオーバーロードも控えめに使えば有用という立場です、紹介することと賛成することとは別だと思います
https://mevius.5ch.net/test/read.cgi/tech/1434079972/84

276 名前:ハノン mailto:sage [2021/09/06(月) 04:40:03.34 .net]
テステス

277 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 07:17:56.24 ID:7SReNX2q.net]
>>263
スレッドセーフでなくともよいシングルトンとか
>メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
で良くね?

>>264
>>263じゃないが非アトミックな操作(初回か否かチェックして初回なら初期化する)
であることが明示される分その書き方の方がマシ
必要なら排他する、不要ならしないという判断ができるから
>すべての関数・クラスを最初からスレッドセーフな設計にしないといけないわけじゃない (>>263
という願いも叶うYO!

278 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 08:08:09.17 ID:62gS+LUW.net]
>>264
確かに普通こんな感じだな
テンプレート別々にすることだけで頭止まってた

>>267
そうだな
書いてはみたがC++でシングルトン使う意味は無いと思う
あれはグローバル変数の無いJavaでグローバル変数を使うためのハックだとか聞いたし
じゃあもう普通にグローバル変数使えばよくね、と

279 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 08:45:11.58 ID:3/UK3SOv.net]
グローバル変数と同じなのでだめだよな
普通に動的に用意して渡せばよろしい

280 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 08:48:23.63 ID:HRRCwLhx.net]
ログとかアプリの現行設定ファイルとかはSingletonっぽく実装するけどなぁ・・・
インスタンス生成が遅いものはただのグローバルにしたら起動が遅くなるし



281 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 09:20:13.64 ID:FistWoaj.net]
>>268
最初のデザパタ本であるGOF本はc++とsmalltalkで書かれてるんで、javaは関係ないよ

282 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 10:32:20.65 ID:d5h9Y6Qi.net]
シングルトンはスレッドセーフが実現できれば問題ないでしょ

283 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 12:01:04.36 ID:KKMECnvR.net]
>>255 >>265
これは「権威に訴える論証」を悪用した主張であり、議論の対象としてはいけない類のもの。
もし真面目に議論したいのなら、少なくともStroustrupの名前は消して内容だけに修正しなくてはならない。

本人も否定しているのに訂正もしないようなフェイク記事は邪悪。それに対してコメントを求めるのは正気を疑う。

284 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 12:06:51.69 ID:86SPG0/G.net]
その昔、こんなクラス作ってたな
class WinMainArguments
{
public:
static HINSTANCE hInstance;
static HINSTANCE hPrevious;
static LPSTR lpszCmdLine;
static int nCmdShow;
};

285 名前:デフォルトの名無しさん [2021/09/06(月) 15:04:51.66 ID:DsY+3+kX.net]
>>265
ブラックジョークは大半の人が聴いた瞬間にジョークだと判るから成立する
麦藁禿のあの名文はまさにそれ

だまされてるのは事情を知らない若い人かも知れんな

286 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 15:52:40.84 ID:86SPG0/G.net]
>>265
GMPについて同意見

287 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 16:43:26.89 ID:akmYwjNo.net]
>>274
ネームスペースつかえよバカww

288 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 16:51:37.50 ID:5nha9zO6.net]
>>277
初期のc++には名前空間が無くてなぁ。
標準化する前だから良く知らんが。

289 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 17:50:02.90 ID:xrgLRigr.net]
その初期のC++ってもしかしてEC++とかいうパチモンじゃないですかね

290 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 17:51:19.11 ID:ugWeBDlD.net]
今更バイエルの運指について議論してるような雑魚に構うなよ
C++もピアノも、憧れだけあって実力がまるでないバカ



291 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 20:33:14.67 ID:d5h9Y6Qi.net]
日本語版(0xCC=フ)によりフフフフフ…で埋められたWin32アプリデバッグメモリを思い出した人、どのくらいいるかな



「フフフ…」4歳娘が撮影した花火に家族で爆笑! 見ると笑顔になる“奇跡の1枚”の状況を父親に聞いた | FNNプライムオンライン
https://www.fnn.jp/articles/-/224754

292 名前:はちみつ餃子 mailto:sage [2021/09/06(月) 23:42:11.67 ID:buVCF6sT.net]
>>278-279
D&E によればネームスペースは 1991 年に ANSI/ISO の委員会において浮上したトピックであるとのことだ。
逆に言えばそれ以前には無かった。
Windows 3.1 の頃に C++ でプログラミングしていたなら >>274 のようなコードが有ったとしても不自然とは言い切れない。

293 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 02:14:57.06 ID:b2odouMM.net]
今でもchar_traitsみたいのあるね

294 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 02:29:38.39 ID:fAleIY7G.net]
なあに名前空間的な修飾を省略させたくない時に役立つ

295 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 03:15:39.97 ID:5ki66s4L.net]
>>259
cに付け加えるならgoのdefer文かなと思う。

296 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 11:04:53.08 ID:1Eqd+3ka.net]
C

297 名前:...Cにだってtry~catch~finallyあるんだからね!(ネタ=setjmp/longjmpを使ったマクロ)
https://gist.github.com/rampion/91594
[]
[ここ壊れてます]

298 名前:デフォルトの名無しさん mailto:sage [2021/09/07(火) 23:50:11.37 ID:jZhA4bAr.net]
>>286
ちなみにtry~catch~finallyっぽいのはVC++が持つと光と闇が両方そなわり最強に見える
Cが持つと逆に最適化が合わさり頭がおかしくなって死ぬ

299 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 05:21:53.89 ID:KzXEzs8I.net]
>>287
別に頭がおかしくなって死なないでしょ
finally機構で資源解放する機会が増えるのはユーザーの利益になるだけで、複雑さを増す不利益にはならないよ

300 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 05:59:59.53 ID:4NmVrZFW.net]
確かにgccだと-O1でも2でも3でも暴走しちゃうけど、vc++だと最適化してもちゃんと動くね



301 名前:デフォルトの名無しさん [2021/09/08(水) 09:59:21.28 ID:1wbeyQs7.net]
VC++はマイクロソフト拡張によってCでも構造化例外処理が使えたんだよね

__try __except __finally

302 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 10:59:12.67 ID:6jFCz4HP.net]
intalコンパイラはほんとにヤバいが、gccの最適化で変なことになったことは自分は一回もない

303 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 17:34:33.82 ID:nCYYHiA4.net]
finallyは20年前からBorlandC++に既に実装済だったしその頃のVC++なんか>>146の状態やし

304 名前:ハノン mailto:sage [2021/09/08(水) 19:46:07.29 .net]
>>276
ですよね!

305 名前:ハノン mailto:sage [2021/09/08(水) 19:47:37.26 .net]
>>286
最近まで try.. catch の実装の大半は sjlj だと思っていましたが最近は違うのですか?

306 名前:ハノン mailto:sage [2021/09/08(水) 19:51:02.76 .net]
>>273
あなたはジョークの分からない人か、それとも >>275 のいう若い人か
>>242>>230 と同様でしょ

307 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 19:52:56.05 ID:zE01k1pD.net]
>>294
IDが出る板でID消してると浪人焼かれるぞ

308 名前:ハノン mailto:sage [2021/09/08(水) 20:33:06.31 .net]
>>296
それは単なる都市伝説
お布施を毎年律儀に払っている人にそんなことをするわけがないでしょう‥‥

309 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 20:48:20.14 ID:4NmVrZFW.net]
>>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;
}

310 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 21:06:38.45 ID:QZMwNs5W.net]
gccで例外ぽい事したいならC++にして使えで完結しちゃうからな……



311 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 21:09:30.53 ID:4NmVrZFW.net]
インラインアセンブラとかでもない限り、処理系依存の文法を使いたくはないし、>>286はあくまでネタですよ。
ただ最適化時の挙動が違う原因を知りたかったので、個人的に調べた結果を載せといただけです。
お気になさらず。

312 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 22:55:38.96 ID:7k6oklod.net]
setjmpの結果を変数に入れちゃダメだって教わらなかった?

313 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 23:11:18.07 ID:cWvdMGeM.net]
入ってなくない?

314 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 02:02:27.18 ID:aICFtjZy.net]
>>297
規制議論板を一度でも見たことがあるの?
どれだけのIDを消して書き込んでる奴が浪人焼かれてるかその目で確かめてくるといい

315 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 02:39:56.24 ID:AtdpUvef.net]
コテとトリ付けながらIDは消すとかいうガイジムーブ
他スレでの荒らしがバレたら困りますって宣言してるようなもんだな笑

316 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 03:11:54.20 ID:GRtgENVW.net]
>>298 https://www.jpcert.or.jp/sc-rules/c-msc22-c.html

317 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 03:58:39.82 ID:k9fYYQrZ.net]
>>305
何を言いたいのか分からない無言URL貼りは時間の無駄なのでやめて欲しいです。少なくとも該当していません。

318 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 04:10:55.91 ID:k9fYYQrZ.net]
一応書いておくと、>>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

319 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 04:18:38.68 ID:k9fYYQrZ.net]
すみません。見落としてただけみたいですね。日本語の方でも個別のコードありましたね。寝ぼけてたかも。

320 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 08:55:47.93 ID:+RnvyubR.net]
>>295
嘘記事かどうかくらいは書いておくべきだと思うがね
だいぶ前に初めて見たとき俺も半信半疑だったし(D&Eをまだ読んでなかった頃だが

てかオブジェクト指向のとこをテンプレート(メタプログラミング)に置き換えるとすごいしっくり来るんだよなアレ



321 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 12:39:56.43 ID:emntwqXC.net]
>>295
全然違う。
>>230は少なくとも本人の発言からの引用であり、(権威に訴える論証が混ざっているとはいえ)すべてを否定することはできない。
>>242は自分の主張を強化するためにでっち上げた嘘であり、本人の普段の主張を否定する邪悪な紛い物。本人も否定しているものをジョークと称するのはやはり正気を疑う。

322 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 12:56:38.90 ID:emntwqXC.net]
>>295
一言言い忘れた。
ジョークを「主張」するなよ。アホか。

323 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 18:44:12.96 ID:9obv3E3K.net]
ワクチン拒否とかしてそう

324 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 18:45:48.31 ID:I6ZDQIJr.net]
ダニングクルーガー効果のなんちゃってマスター状態でも容易に書けちゃうのが問題。
そのクソコードの状態でも一応動くところがC++の恐ろしいところでもあり幅広いフリーフォーマットの適応力でもある。

325 名前:デフォルトの名無しさん [2021/09/09(木) 19:54:26.64 ID:VcdPV4nP.net]
jokeもhumorも馬鹿には理解できない

326 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 20:23:36.23 ID:M2q//47O.net]
>>312
自粛警察乙
マスゴミに煽られるまま踊るのジュリアナのお立ち台みたいな気分?

327 名前:デフォルトの名無しさん [2021/09/09(木) 20:26:09.91 ID:5B6QjFP1.net]
お前らってホント人にケチつけるときだけイキイキとしてんな

328 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 20:41:37.86 ID:Ja2+yviO.net]
シャリーア・ポリスとかスシ・ポリスとかみたいな人

329 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 11:18:20.93 ID:ke/Tkn8S.net]
オブジェクト指向も構造化も原理主義者がウザいだけで
ナンチャッテでいいからやってると問題がきれいに整理できるので
やめようとは全然思わない

テンプレートだってそうだ

330 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 11:23:49.14 ID:rfW8qH4V.net]
pbs.twimg.com/media/EUH_eMWUwAAgsV4.jpg
https://pbs.twimg.com/media/D4p7dNfUwAAa34y.jpg



331 名前:デフォルトの名無しさん [2021/09/11(土) 12:26:09.65 ID:3OqmYb77.net]
C++には酸っぱい葡萄もある

332 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:37:06.92 ID:FXACoymx.net]
テンプレートってただの超絶便利機能だろ
オブジェクト指向笑とは比べ物にならない

333 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:45:07.36 ID:d+bn5JZd.net]
>>318
歴史は繰り返す、ってことだろ
一時期C++コミュニティがJavaに悪影響受けたりしてたことからJavaを嫌悪してたやつが
何でもSTLの真似してりゃ自動的に価値のあるコードになると盲信してたからな
笑うしかない

334 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:49:01.51 ID:ke/Tkn8S.net]
俺ら技術屋の辛いとこだよ
新しいものはとりあえず食ってみるしかない
あげくゲロマズで非常に気分が悪くなることもあるが怖がってらんない

335 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 12:59:15.55 ID:d+bn5JZd.net]
技術屋というか、実用してる人は盲信はしないと思う
原理主義に走るのは、自分の頭で考えない(権威に頼る)からだ
自分の頭で考えて使ってれば、自ずと長所も短所もわかるもんだ

336 名前:ハノン mailto:sage [2021/09/11(土) 14:40:07.67 .net]
>>311
人を選ぶジョークとはまさに >>242 のことだったんですね‥‥
今回は勉強させていただきました

337 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 15:50:05.22 ID:pU9Ou8D7.net]
分かったら二度とデマ流すなよ
ワクチンにマイクロチップだのどこそこの銀行が潰れるだの朝鮮人が井戸に毒入れただのもだぞ
本人は軽いジョークのつもりでも、デマとして流行したら人が死ぬんだからな

338 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 18:07:47.03 ID:ke/Tkn8S.net]
> 原理主義に走るのは、自分の頭で考えない(権威に頼る)からだ

ほんこれ

339 名前:デフォルトの名無しさん [2021/09/11(土) 21:27:01.30 ID:3OqmYb77.net]
そうはいってもC言語規格にfinally機構があったら便利なはず
PGが規格追加に後ろ向きになってしまうのはコンパイラの対応が信頼できるレベルになるまで時間がかかる不快な経験を積んできたから

340 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 21:45:47.80 ID:mopEDxb+.net]
デストラクタもないC言語にfinallyだけあってもねぇ…



341 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 21:55:48.31 ID:x2ZLDQix.net]
じゃあC#使えで……

342 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 21:59:46.39 ID:3OqmYb77.net]
>>329
デストラクタがないからこそfinallyで資源解放処理を呼び出す需要があるともいえるんだけど

343 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:14:53.27 ID:rQxvOqzv.net]
>>331
実際に書いてみたらわかると思うけどどこからfinallyに来るのかわからないから解放処理書くのはけっこう大変だぞ

344 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:44:38.83 ID:3OqmYb77.net]
どこから来るかわからないのはgotoも同じ

345 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:51:49.85 ID:6kN4WIJa.net]
だからたいして楽にはならんよって話ね

346 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:54:02.48 ID:zCvRZpSn.net]
例外がいらんわ
必要としてるやつはC使うなよ

347 名前:デフォルトの名無しさん [2021/09/11(土) 23:18:46.75 ID:EO9owr6G.net]
関数毎に atexit かな

348 名前:デフォルトの名無しさん [2021/09/12(日) 01:57:56.96 ID:z8yQu9Mw.net]
Goのdefer文でいいんじゃないか

349 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 11:03:53.61 ID:JRO5EM3e.net]
ハノンフルボッコされて火病を起こしててワロス
自分が悪いのに逆ギレするほどみっともないことはないなあw

350 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 11:40:02.90 ID:AN8tG6su.net]
整形後に関数が10行以上になったらコンパイルエラーにしよう
関数名1行+開きカッコ1行+return1行+閉じカッコ1行だから実質5行までな



351 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 12:24:15.40 ID:SBMPlzna.net]
たまにちびっこだらけのピアノ教室に一人だけ下手くそなおじさんが混ざってて臆面もなく発表会とかにも出てくるけど、それがその固定ハンドル

352 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 17:30:32.90 ID:d/9I2lQ9.net]
質問でsが
std::this_thread名前空間内の関数は、std::thread以外の手段で作ったスレッドで
実行しても大丈夫なんでしょうか、

一部のC標準ライブラリ関数みたいにスレッド起動手段次第でリークしたりすることは無い?
https://cpplover.blogspot.com/2010/10/msvc.html

353 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 18:10:18.89 ID:TJh0S1vO.net]
>>341
やってみないと分からないから自己責任でご自由にどうぞ、というのが正しい回答

354 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 18:54:34.09 ID:d/9I2lQ9.net]
>>342
std::thread以外の手段で作ったスレッドで実行したときのふるまいは
規格上非規程ということでおk?

355 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 18:58:14.10 ID:d/9I2lQ9.net]
未定義動作とか処理系依存とかではなく、規定されていないということ?

356 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 20:27:37.58 ID:x/1IPUIX.net]
大丈夫なんじゃないすかね
mainはstd::thread以外の手段で呼び出されるんだし

357 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 21:31:25.44 ID:ewAYKYUU.net]
どうやってアクセスするん

358 名前:ハノン mailto:sage [2021/09/13(月) 01:29:14.15 .net]
>>326
米国民主党の宣伝=ロイター・ブルームバーグ=真実
米国共和党、なかんずくプレジデント・トランプの言ったこと=フェイクニュース
という理解でいいでしょうか?イヴェルメクチンの話 https://www.youtube.com/watch?v=zhIg_KNfyhQ

>>338
どこがフルボッコか詳しく、ジョークのわからない馬鹿一人だけが騒いでいた、という印象ですが

>>340
バッハコンクール大人の部には出てみたいですね‥‥たぶんよくできる中高生のなかに一人ヨボヨボが混ざるの図になりそうですけれどもね

359 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 02:16:31.80 ID:ZygXXNwA.net]
>>347
コンクールとは無縁の音楽歴だろうがクソバカが
見栄張んなよ
精々弱小音楽教室の発表会止まり

360 名前:デフォルトの名無しさん [2021/09/13(月) 03:47:26.34 ID:PttYpQoG.net]
わかるよ
C++とはつまりCから2キー(2半音)上げたDという意味
ピアノならCはドでDはレ



361 名前:デフォルトの名無しさん [2021/09/13(月) 04:01:44.26 ID:PttYpQoG.net]
このスレにMIDIエンジンを自分で作ったことある人、どのくらいいる?

362 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 06:59:19.04 ID:ZygXXNwA.net]
ピアノじゃなくても「CはドでDはレ」だと思うが……

363 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:04:19.91 ID:B8QV0Pmm.net]
MDLを入力してWAVを出力するコンパイラみたいのなら

364 名前:デフォルトの名無しさん [2021/09/13(月) 07:13:59.03 ID:PttYpQoG.net]
>>351
思うだけならあなたの自由だから好きにしなさい

365 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:15:10.48 ID:OJvNe7+i.net]
>>351
世の中には移調楽器って言うものがあって、例えば普通によく見かけるトランペットはドの音はB♭だったりする

366 名前:デフォルトの名無しさん [2021/09/13(月) 07:16:20.40 ID:PttYpQoG.net]
Windowsの標準システムドライブがCであることの経緯を知らないでPGやってる人、どのくらいいる?

367 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:50:09.00 ID:B8QV0Pmm.net]
UNIXから一歩も離れたくない人とか?

368 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:56:33.80 ID:9W3p606T.net]
aとbドライブがフロッピー

369 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:59:56.78 ID:B8QV0Pmm.net]
かつて日本ではAがHDDだった

370 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 09:28:48.75 ID:Kz73eSbE.net]
>>350
SWFreaderのこと?
SoftwareSynthesizerのこと?



371 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 12:01:25.13 ID:DUyA86Uv.net]
MIDIなんてPC-98以前のFM音源搭載機でしかいじらなかった
MIDIドライバとかならともかくMIDIエンジンが何なのかよく分からない

372 名前:ハノン mailto:sage [2021/09/13(月) 13:47:19.19 .net]
>>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
確かアニメ監督の押井守は若い頃バッハの合唱団にいたと聞いています

373 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 19:44:06.04 ID:O/wDGHc8.net]
>>361
スレ違いはお前一人なんだが・・・

374 名前:デフォルトの名無しさん [2021/09/15(水) 11:32:22.49 ID:0GWRKP/3.net]
関数のポインタを引数で受け取る関数に
予め定義した関数のポインタの代わりに
lambda関数のポインタを渡したいとき
どう書けばよいですか?

375 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 11:43:21.99 ID:KsZNjWDc.net]
>>363
ラムダ式を呼び出すラッパー関数を作って、その関数ポインタを渡す

376 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 11:57:59.21 ID:tjq2eHQi.net]
std::functionでええやろか?

377 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 12:01:19.03 ID:+suq2kti.net]
>>363
こういうこと?
void func1(void (*arg)())
{
arg();
}

template <std::invocable F>
void func2(F arg)
{
arg();
}

int main()
{
func1([]{});
func2([]{});
}

378 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 12:57:52.48 ID:gM7DTPzC.net]
>>363
違うかも知れんけど、関数ポインタとラムダと型推論でなんかハマってこの記述に落ち着いた。
ttps://ideone.com/UNUgdi

379 名前:はちみつ餃子 mailto:sage [2021/09/15(水) 13:01:11.97 ID:/JHaU2Oz.net]
>>363
クロージャ (ラムダ式によって作られた関数オブジェクト) は周囲の変数をキャプチャしないときに限り関数ポインタに変換可能。
https://timsong-cpp.github.io/cppwp/n3337/expr#prim.lambda-6
逆に言えばそうでないときは関数ポインタと互換性はない。

受け取る側が関数ポインタとして受け取るという前提を動かせないのであれば
渡すラムダ式のほうをキャプチャしない形にしてくださいということになるし、
汎用的にラムダ式を受け取れるようにしたいのだということであれば >>365-366 という方法をとることになる。

380 名前:デフォルトの名無しさん [2021/09/15(水) 13:05:03.04 ID:0GWRKP/3.net]
>>366
template<typename F> void func2(F arg) { arg(); }
int main() { func2([]{}); }

これだと動いています

void func1(void (*arg)()) { arg(); }
int main() { func1([]{}); }

やりたいのはこっちだったんですがこれはコンパイルエラーになりますた

# invocable は C++20 からみたいですね 目的にあってるかどうか判りませんが試す環境が今無いので後回しです



381 名前:デフォルトの名無しさん [2021/09/15(水) 13:05:45.58 ID:0GWRKP/3.net]
>>368
ああなるほど
[&] してたのが原因かも知れません
ありがとうございます

382 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 13:22:34.75 ID:+suq2kti.net]
そういうオチか

383 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 16:27:00.87 ID:46YA8/2z.net]
>>369
ヒント: コンセプト

384 名前:デフォルトの名無しさん mailto:sage [2021/09/16(木) 21:11:24.40 ID:wgmfJty/.net]
単項+が意味を持つ例のやつか

385 名前:デフォルトの名無しさん [2021/09/17(金) 16:40:49.64 ID:J/w/zJeW.net]
仕事が生きがい?会社員の分際で?そろそろ認めなさい…あなたたちは単なる駒です
⇒赤羽の父ひろゆきが教える仕事の本質とやりたいことの違いが凄過ぎて感動が止まらない…
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

386 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 12:55:20.00 ID:fzYJNrfO.net]
聞いてくれウィンドーズ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
なんじゃわ;;;

何で?!

387 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 12:57:50.95 ID:fzYJNrfO.net]
処理系はMSVC2019でつ、
duration_cast<T>はTで指定した時間単位未満は切り捨てとC++の規格で決まっているはず……

388 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:05:15.92 ID:fzYJNrfO.net]
ちなみにst1 < st2 でありかつ (now ≦ st2) が非成立、というケースも発生するあるから
おかしいのは明らかにstd::chronoの方、

389 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:23:54.83 ID:I+biH5jK.net]
>>377
これだけじゃどっちがおかしいかは分からんでしょ
GetLocalTimeが正しいと思うからGetLocalTimeでsystem_clock::nowを挟んだんじゃないかい

390 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:43:19.07 ID:fzYJNrfO.net]
>>378
>>377のは時刻のキャッシングみたいなことをしており呼び出した瞬間の時刻を返していないとしたらそれはGetLocalTime()の方ではない、という証左

つなみにマルチコアと最適化(いやしくもAPIの呼び出しがあるのであり得ないが)とプリエンプションの合わせ技で
実行順序が変になり得るかも、みたいな被害車妄想で
  GetLocalTime(&st1);
  const system_clock::time_point now = system_clock::now();
  _ReadWriteBarrier();
  GetLocalTime&(st2);
としてみたが>>377な現象は変わらんかったは、



391 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:48:57.22 ID:vjp4M7Ow.net]
windowsのAPI同士で比較しろ
一般に違うAPIを使ってるなら一貫した結果にならなくてもおかしくない

392 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:53:59.82 ID:I+biH5jK.net]
ちゃんと知りたいならsystem_clock::nowが内部でどのAPIを呼んでいるのか調べてみては

393 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 13:58:54.14 ID:EqZgRVmV.net]
変数tpはなにものですか

394 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 14:01:55.85 ID:EqZgRVmV.net]
というか% 1000っておかしくね???

395 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 00:12:35.69 ID:EWVuImUN.net]
>>375
お前の頭がおかしいんだよ

396 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 00:47:53.30 ID:hcp/HEe5.net]
不等号≦への理解、間違ってないか

397 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 07:30:37.33 ID:CNUd2o2A.net]
unsignedとintを比較してるとかどうせそういうオチだろ

398 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 13:12:19.06 ID:/yxUr6Cy.net]
中途半端なコード

399 名前:セけチラ見せされてもな
再現する完全なコードを出せとしか
[]
[ここ壊れてます]

400 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 15:50:35.11 ID:neurUQ4a.net]
>>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だけ追い越している



401 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 15:57:36.84 ID:neurUQ4a.net]
こっそり訂正するが、>>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

402 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:10:18.78 ID:HwX1dH8g.net]
まともに読んでないがバリアの使い方がおかしくて実行順序入れ替わってるとかじゃね??

403 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:33:01.30 ID:neurUQ4a.net]
>>390
(1) _ReadWriteBarrier()は最強のバリアーやぞ;;;
(2) GetLocalTime()がどんな副作用を持つ関数かコンパイラが知るはずは無いのだから
  最適化でコードの入れ替えや変数のレジスタ割り当てしっぱなしということはあり得ない
(3) ていうかそれ以前に、GetLocalTime()やstd::chronoの呼び出し元がシングルスレッドなのだから
  それで順序がおかしくなるとかCPUがおかしいか、スレッドをプリエンプトして再びディスパッチする際に
  別のコアに実行させようとする際にOSがヘマしているかのどちらかという話に……

ちなみに漏れは正常動作しており、本人が言うのだから間違いない

404 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:39:43.92 ID:k8GedCcQ.net]
https://gist.github.com/t-mat/3763854

Windows10ならSYSTEMTIMEよりsystem_clockのほうが精度高そうですね

405 名前:はちみつ餃子 mailto:sage [2021/09/19(日) 17:02:40.43 ID:nkVr2ypq.net]
>>375
GetLocalTime の分解能は 10ms くらいっぽいぞ。
system_clock::now がもっと精度の高い API を使っていたら
そんくらいの前後はあってもおかしくないんじゃね。

406 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 17:17:42.61 ID:k8GedCcQ.net]
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やめたら?

407 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 17:28:49.56 ID:UeoKc9fZ.net]
時刻取得用のAPIをパフォーマンス計測用に使っちゃったんだね
WIN32では大昔からQueryPerformanceFrequencyとQueryPerformanceCounterを使うよ
https://docs.microsoft.com/en-us/windows/win32/api/profi

408 名前:leapi/ []
[ここ壊れてます]

409 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 17:59:29.70 ID:UeoKc9fZ.net]
時刻取得でそのまま精度を上げる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である模様

410 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 19:46:00.85 ID:neurUQ4a.net]
>>393
GetLocalTime()の精度が10 ms台だというのは
Windowsのデフォルトのスレッドへの最大ディスパッチ時間15.6 ms(PCによっては10 ms)の影響が混入している可能性、
>>392のリンク先のような計測方法をとった場合、計測中に他のスレッドに実行権を横取りされたりすると、どうしても
期待する時間に対して15.6 msとか(高優先のスレッドが相次いでディスパッチされた場合はあるいはもっと)実際の時間が大きくなる
一方>>375の計測方法は時間の順序にのみ注目しており、プリエンプションの影響を受けない(はずだった
この話に猜疑があるなら後で述べる

>>392
>>392の情報提供はdクスやし実際乗り換えようかと考えているが、それはそうとして、std::chronoのふるまいを検証しなくて委員会?



411 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:05:49.20 ID:neurUQ4a.net]
というわけで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

問題無くなったやたー

412 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:13:38.40 ID:neurUQ4a.net]
>>393
GetSystemTime()は確かに根本的に精度悪かったスマンカッタorz
この結果からすると、ウィンドーズのシステム時間のの実装は、
OSがプリエンプトした際に更新し、ディスパッチ中は値が変わらないというしくみな可能性が大きい
※ 取得時間の間隔が15.6 msの倍数にならないのは、15.6 msというのがあくまで1津のスレッドが
  ディスパッチされてからプリエンプトされるまでの「最大」時間であって実際は高優先のやつに横取りされたり
  自発的に待ちに入ったりで15.6 msより小さい時間で実行権をOSに返すからだと思う

413 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 21:46:58.47 ID:UeoKc9fZ.net]
古いWIN32開発者には常識的な話で検証の必要もなく、実際に検証用のプログラムは昔から大量に作られてるからだと思う

取得時間の間隔が15.6 msの倍数にならないのは「主に16ビット Windows との下位互換性のため」
https://docs.microsoft.com/ja-jp/windows/win32/sysinfo/windows-time

414 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 22:17:24.32 ID:k8GedCcQ.net]
>>400
後半って「Windows時刻」の説明だよね?
GetSystemTimeで得られるのは「システム時刻」であって、また別の時刻体系だと読んだけど間違ってる?
https://docs.microsoft.com/ja-jp/windows/win32/sysinfo/system-time

WinAPIスレに持っていったほうがいいかもな

415 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 22:38:35.16 ID:UeoKc9fZ.net]
>>401
大元はWindows3.1時代からあったGetTickCountだと思うんだけど、説明的にそこしかなかったから書いた
WinAPIスレで聞きたければどうぞ

416 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:06:39.19 ID:luBeUSFz.net]
周期15.6 msを下位互換性のために新しいWindowsがエミュレートしているというのはありえない

1スレッドへの最大割り当て時間としての15.6 msはPCによって変わり得るデフォルト値にすぎないし、
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で説明いしたし

417 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:10:20.87 ID:luBeUSFz.net]
で、GetTickCount()の分解能かきちり1 msであることはビジーループ的に値をとってみたらワカル
分解能に関して後方互換性も糞もなく昔からそいうブツのはず
多分やけど、ハードウェアのカウンタを読んでるだけやからなあれ

418 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:25:55.12 ID:luBeUSFz.net]
と思って、
  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)
  }
というのをやったら、

419 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 00:26:50.20 ID:luBeUSFz.net]
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
まつがえますたすみません;;;
勉強になるなあ、

420 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 06:12:36.98 ID:DnvAIBnA.net]
>>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程度の分解能がある
感想: 誤差大きい



421 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 07:46:32.11 ID:Pqsh6MJQ.net]
ここはWindowsAPIスレになったのか

422 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 07:51:13.46 ID:l/aXhlvm.net]
スレタイも読めない、検索できないやつがまともなプログラム書けるはずもなく・・・

423 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 07:52:13.05 ID:Mm5TpRqo.net]
windows API使いたがるひとがいてめんどくさい
こっちはなるべく標準のc++使いたいのに

424 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 08:19:53.25 ID:VgAULHWI.net]
POSIXと比べるとクソ過ぎて話にならんよな

425 名前:デフォルトの名無しさん [2021/09/20(月) 10:01:57.22 ID:LqQpPYvk.net]
プラットフォーム固有の話も参考になる
今回の流れは Win32 API と std::chrono の違いが端緒だしスレ違いというほどではない

426 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 10:48:50.60 ID:T+6xg0LJ.net]
そのクソがなんで一番利用者多いのか考えてみろ

427 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 11:24:41.17 ID:VgAULHWI.net]
バカに合わせてるからだろ
言わせんなよ恥ずかしい

428 名前:ハノン mailto:sage [2021/09/20(月) 11:26:09.83 ID:+hQanlE4.net]
私馬鹿よねーお馬鹿さんよねー今日も win32api

429 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 11:30:28.88 ID:DnvAIBnA.net]


430 名前:とりあえず動かないから面白くないということなのかもなということで、Linuxのclock_gettimeにも対応しといた。
BSDとmac組は知らん。
https://ideone.com/Z9CfOo

一応WIN32はあえて低解像度のを計測してるという点だけは補足しておきます。
[]
[ここ壊れてます]



431 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 12:15:53.36 ID:rmuhdvcF.net]
timeBeginPeriod
木屋さん元気かな

432 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 12:28:29.25 ID:26DwFCZj.net]
元の質問見てないけどQPCでええんちゃうの

433 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 12:45:29.78 ID:DnvAIBnA.net]
>>417
スレッドのスケジューリングも変化するので注意です。
tickとはそもそもそういうものでしたが。
archive.linux.or.jp/JF/JFdocs/The-Linux-Kernel-20.html

>>418
>>395でそう言ったし、high_resolution_clockで使用されてるのもそれ

434 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 12:51:33.23 ID:VgAULHWI.net]
CreateWaitableTimerEx(NULL,NULL,CREATE_WAITABLE_TIMER_HIGH_RESOLUTION,TIMER_ALL_ACCESS)

435 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 13:22:11.61 ID:DnvAIBnA.net]
>>420
そのタイマは同期待ち合わせに使用するタイマリソースですね
時間計測用に使うのは勿体ないのでやめましょう
また無言でAPIだけ書かれても困ります

436 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 13:58:28.71 ID:VgAULHWI.net]
バカか
計測するなら精度高めないと意味ないだろ

437 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 14:31:11.65 ID:LO5PkHvF.net]
そもそもパフォーマンスの計測に使うなんて言ってなくない?

438 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 16:05:39.48 ID:DnvAIBnA.net]
>>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の分解能のまま時刻っぽいものを得るみたいなことも短期的には現実的な精度でできなくはないけど。

439 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 05:50:44.21 ID:B+D0wTVh.net]
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な未来が見える見えまくり

440 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 05:55:32.54 ID:B+D0wTVh.net]
実態は>>399に書いた理由のはずで、
証拠にst1の取得とnowの取得の間にSleep(1000)とか入れたら
>>388の結果はたちどころに
 st1 ≦ now && now ≦ st2 + 1秒
に早変わりする
よってGetSystemTime()で取得するSYSTEMTIMEの分解能はHWタイマの分解能/性能起因ではなく、
GetSystemTime()で取得する時刻がOSのプリエンプションタイミングでのみの更新されるというソフト要因である、
という>>399に述べた理屈が正解ということでケテーイ

実際にやってはいないが天才なので以上のことはちょっと考えたらワカル



441 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 06:02:51.16 ID:B+D0wTVh.net]
ごめ、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もプリエンプションの機会にならない保証が無いのでビジーループはガチでビジーループで作る必要があり、
面倒なのでやらないがな!

442 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 07:18:10.24 ID:B+D0wTVh.net]
といいつつ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()のふるまいが一方的に謎杉

443 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 08:12:02.95 ID:HzR9ZlyY.net]
WinAPIスレに持っていってくれますか?
結局<chrono>に固有の問題(?)ではなくて背後のAPI関数に関することって分かったはずなんで

444 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 08:44:57.34 ID:HzR9ZlyY.net]
とか言いつつ自分で探してきたので貼っちゃう……
GetSystemTimeの分解能が15.6msというのはXPまでの話らしい

https://www.thedelphigeek.com/2007/10/calculating-accurate.html

445 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 09:20:27.88 ID:ZWKkb85T.net]
>>425
HWタイマの分解能/性能の違いと言ってるのはsystem_clockとsteady_clockの違いの話でWindows APIの話はしてないよ。
一応補足しておくとepochも違う(時刻としてそのまま使えるのはsystem_clockということ)。
>>426以降は妄想が迷走してるだけに見えるかな。
>>430は新しい事実で>>393の謎も解けたしもう俺的に不思議な部分はない。

446 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 17:45:16.21 ID:+JZgAVsh.net]
> プリエンプションの機会

機会を与えないことができるのは昔のWindowsだろ

447 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 18:35:43.94 ID:8CcFj4Yb.net]
今だって邪魔できるよ
消極的ではあるけど

448 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 18:44:00.64 ID:+JZgAVsh.net]
割り込み禁止命令が実行できたり
割り込みコントローラにコマンド出せたりする
デバドラかMODESETみたいのないと無理だよ

449 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 12:46:15.93 ID:9lvhFgGq.net]
std::complex<double> の変数 a, b について、OpenMP の並列リージョン内での
#pragma omp atomic
a += b;

error: invalid expression type for '#pragma omp atomic'
というエラーを出すんですが、std::complex はアトミック演算の対象外ですか?
それとも他の何かを見落としてる可能性がある?

450 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 13:03:13.46 ID:4UIlewCz.net]
ompのAPI仕様書を読むと対象はスカラー型のみって書いてあるから対象外なんじゃないの?



451 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 13:04:21.25 ID:4UIlewCz.net]
ここのx and vってとこ
https://www.openmp.org/spec-html/5.0/openmpsu95.html

452 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 13:07:22.68 ID:9lvhFgGq.net]
数学とか物理の用語としては複素数はスカラーですが、コンピューター用語としては違うんでしたっけ?

453 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 13:18:19.13 ID:loHIOGgF.net]
確かモルダーを疲れさせる女のこと

454 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 13:28:55.11 ID:pztAGZv/.net]
対象外
ぷりみ恥部とPOD以外だめ

455 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 14:59:44.58 ID:4UIlewCz.net]
>>438
std::complexはclass型だよ。c++では

456 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 15:02:24.84 ID:9lvhFgGq.net]
>>441
つまりatomicはプリミティブ型だけ想定してるってことですかね
ありがとうございます
おとなしくクリティカルセクションにします

457 名前:はちみつ餃子 mailto:sage [2021/09/27(月) 00:54:20.59 ID:vtQXnC4F.net]
>>438
C++ におけるスカラ型の定義
・ 算術型 (整数型と浮動小数点数型)
・ 列挙型
・ ポインタ型
・ メンバへのポインタ型
・ std::nullptr_t
・ 以上を cv 修飾 (const や volatile で修飾) したもの

https://timsong-cpp.github.io/cppwp/n3337/basic.types#9

言語によって定義は異なっている (または定義を持たない) ので
コンピューター用語として一般化は出来ないと思う。

458 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 06:07:00.04 ID:vzE92GBt.net]
ここはC++スレだからC++用語で必要充分だ
無理に一般化する必要はない

459 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 08:56:19.98 ID:P6ytpwfT.net]
複素数が「算術型」じゃないのって冷静に考えるの結構奇妙だな

460 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 19:18:30.57 ID:LR1S7vXs.net]
複素数を直接扱う命令がないCPUが多い以上、小数2個で表される複素数がスカラではないのは自然だと思うけど

それを言い出すと、一般線形群と呼ばれる行列はなんでも算術型になるのではないか?と思えてくるし



461 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 19:25:38.25 ID:n9hc+rIL.net]
arithmeticを「算術」とか仰々しく訳すからおかしくなる
要は小学生がさんすうで習うような単純な数のことよ

462 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 22:16:24.75 ID:D7AKGDxr.net]
そもそも数学でも複素数はスカラじゃないよな

463 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 22:19:03.53 ID:sGjfmd1K.net]
ベクトルの係数になるんだから基本的にスカラじゃねえの

464 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 22:43:23.51 ID:PI7czi9F.net]
スカラーだったりベクトルだったりするらしい
izumi-math.jp/K_Manabe/what_v/what_v_3.htm

465 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 22:51:45.61 ID:GPisoDJi.net]
複素ベクトル空間の係数体の元として見ればスカラだし複素数体を実ベクトル空間と見れば複素数は実ベクトル

466 名前:デフォルトの名無しさん mailto:sage [2021/09/28(火) 07:58:37.24 ID:ZoUlFxaV.net]
除算が定義できる体なので普通はスカラーとして扱うと思うけどな。
2要素の実ベクトルや2自由度の行列に適切な演算を導入することによって同一視することはできる。

467 名前:デフォルトの名無しさん [2021/09/29(水) 10:21:13.97 ID:QYKzykPR.net]
>>447
要は小学生がさんすうで習うような単純な数のことを「算術」と言うんだが

468 名前:ハノン mailto:sage [2021/09/29(水) 18:51:49.92 ID:+NS+8RdU.net]
>>452
>2自由度の行列に適切な演算を導入
有名な a b -b a 以外にも複素数と同様に振舞う行列を定義できるものでしょうか?それはどんな形?

469 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 19:37:07.20 ID:F6bYTA4Q.net]
好きなX^2=-Iを満たす行列Xを用意すればaI+bXが複素数の表現になるよ

470 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 04:33:42.15 ID:a96KQdEj.net]
>>454
> 有名な a b -b a 以外にも
> 複素数と同様に振舞う行列

この世のことを何一つとして理解してないことがよく



471 名前:伝わってくる2フレーズ []
[ここ壊れてます]

472 名前:デフォルトの名無しさん [2021/09/30(木) 10:27:42.19 ID:rsDh5L5E.net]
i 0
0 i

473 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 12:07:05.65 ID:CrfxKotF.net]
複素数z=x+iy (x, y:実数)とした場合どうやって行列で表現できるのか分からん
そもそも無理だろ

474 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 12:15:59.67 ID:LH+TfD4u.net]
いい加減スレチだぞお前ら

475 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 12:39:55.75 ID:HqpdIwHE.net]
複素数の実行列表現あたりで調べれば出てくるから自分で調べろ。

複素数ライブラリの実装は行列表現だろ。

476 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 14:36:41.46 ID:rqtJMe+2.net]
承認欲求が満たされなかったキチガイのハ◯ンが荒らしてるんだな

477 名前:ハノン mailto:sage [2021/09/30(木) 21:06:22.87 ID:SS5VJirH.net]
>>460
キーワードありがとうございます!
1, 1, -2, -1 とか 3, 2, -5, -3 とか i に対応するものはいろいろあるんですね

>>456
生きていてすみません

478 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 22:32:11.42 ID:hyVGcxZ+.net]
複素数ライブラリの実装が行列表現な訳ないだろ

479 名前:デフォルトの名無しさん [2021/10/01(金) 04:28:27.07 ID:YSb3+a7i.net]
パウリ行列やで

480 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 08:55:53.93 ID:wyBR1P+Z.net]
それは四元数では



481 名前:デフォルトの名無しさん mailto:sage [2021/10/01(金) 11:45:26.96 ID:o+E+DUKy.net]
そもそも勝手な演算❎とかを用意して、それを複素数の演算になるような演算規則にすればいいだけの話

普通のプログラミング言語での実装は2要素ベクトルに対して複素数積となるような演算を*に対応させているんだと思うけどな

行列積が複素数の積と同一視できるような表現行列があるというだけ

群論とか環論とか体論とか入門的にでもやればわかるよ

482 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 13:55:46.16 ID:cR/mfYmg.net]
ベクトルの要素は座標変換で変わるからスカラーではない

483 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 13:59:33.99 ID:cR/mfYmg.net]
まつがえたorz
誤: 変わるから
正: 変化すっから

484 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 14:34:20.70 ID:7v0dyN4q.net]
物理屋さんか?

485 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 14:56:43.55 ID:cR/mfYmg.net]
んまーたしかに物理現象は座標変換しても変わらない(同じもの)とみなすのが
物理の先生なのかもしれん スカラーもそん延長線上の概念
しかし観測が系に影響を与えると言い出した時点でいつまで真理でありつづけることやら……

486 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 20:42:45.96 ID:xJ5F1jwy.net]
>>467
言葉足らずだったかもしれないが、複素数体と数学的にはR2の正規直交基底かつ基底の長さが1のベクトルの成分表示を、適切な演算を入れることによって同一視することができるという話をしているのであって、一般的なベクトル空間の話をしている訳ではない。

487 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 21:15:26.25 ID:cR/mfYmg.net]
スカラーか否かというのは数をどこに使うかの話であって
数をどう表現するかの話ではないし、

488 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 21:16:10.17 ID:cR/mfYmg.net]
それはそうとしてR^2と言っただけでは計量が入っていないから(平行移動も糞も無いため)ベクトル空間ではない
つまり { ベクトル空間 } ⊂ { R^2 } であってR^2の方がより一般的

R^2上で実数と同じ7つの演算則を満たす演算を形式的に定義することはできるが|i|=1を表すために
>正規直交基底かつ基底の長さが1のベクトルの成分表示
が必要になるから複素数体を正確に言い表すにはR^2ではなくてユークリッド空間か何かが要ることになるんじゃないの

489 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 22:42:32.17 ID:5uoG6j9g.net]
加法(V × V → V)と係数体による倍演算(K × V → V)が入ってて線型ならベクトル空間だよ, 計量入れたら計量ベクトル空間

490 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 17:00:23.30 ID:YgA3J5wy.net]
関数の引数に参照渡しで何も渡さないようにするはどうすればよいですか

自作クラスAがあったとして、それを引数にとる関数
void hoge(int& p1, A& p2)
があります。

ただ、p2は、ケースによっては要らない場合もあって、その場合にはどうすればよいですか。

調べてみたらnullptrみたいなのはあったので、
int p1 = 1;
hoge(p1, nullptr);
と書いてみても、
非constの左辺が何とかとエラーが出て、渡せませんでした。



491 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 17:34:05.28 ID:lBT+65cn.net]
*nullptr

492 名前:はちみつ餃子 mailto:sage [2021/10/05(火) 17:41:01.80 ID:krkmojOq.net]
>>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 を組み合わせれば表現できなくもないかなぁ……。

493 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 17:45:03.34 ID:UD2fraRe.net]
NullObjectパターンすね

494 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 17:48:18.95 ID:lBT+65cn.net]
hoge(p1,* static_cast<A*>(nullptr));

495 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 17:49:14.63 ID:3jRalumJ.net]
>>476
*(A *)nullptr にしないとエラーになるな
そいで関数側で&p2==nullptrでnullptrが渡されたかどうかチェックできるね
でもこんなの許されてるの?

496 名前:はちみつ餃子 mailto:sage [2021/10/05(火) 17:52:23.11 ID:krkmojOq.net]
>>476 >>480
当然だけど (空ポインタを含めて) 無効なポインタをデリファレンスしたらその時点で未定義。

497 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 19:00:16.73 ID:lBT+65cn.net]
何いってんだ
キチンと動作する
ただの参照なんだから未定義じゃないだろ
他の変数に受け渡してるワケでもないし

498 名前:はちみつ餃子 mailto:sage [2021/10/05(火) 19:59:32.04 ID:krkmojOq.net]
>>482
実質的な (コンパイルされた後の) 動作として値を取り出す必要がないというのは、
言語仕様上において * の適用を無かったことに出来るわけではない。
(C には単項 * の結果に単項 & を適用した場合に相殺されてどちらも無かったことになる規則があるが……。)

499 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 20:26:29.70 ID:SwNxahaG.net]
また未定義動作なんか怖くない君か
命知らずなのはいいけどチームプログラミングには関わらないでね本当に迷惑だから

500 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 20:32:26.64 ID:7rL/DhC7.net]
1. 参照をやめてポインタにする
2. std::optional<T>を使う(C++17以降)

俺ならこのどっちか



501 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 22:18:37.99 ID:bhHmmGon.net]
クラスTが自作クラスなら
Tにnulを意味するlオブジェクトを定義すれば良い……
>>477なdummyオブジェクト方式はテンプレートの中で使いにくくなるいはず
>>485なstd::optional<T>案はどうせ余計な記憶を要するのだからT固有のnullを定義するうのとイーブン

502 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 22:24:32.10 ID:bhHmmGon.net]
もちろんT固有のnull「値」の定義においては
  オブジェクトの参照 == null値、
はアドレスの一致ではなく値の一致として解釈されねばならな


503 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 22:44:53.78 ID:bhHmmGon.net]
さもないと、クラスTのnull値をT_NULLみたいな名前にしたとして、
  T arr[] = { T_NULL, T_NULL, T_NULL, T_NULL };
みたいなことができないか
らな

504 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 00:36:12.25 ID:meWA0K5y.net]
>>480,482
gcc 11 の -O2 で「&p2==nullptrでnullptrが渡されたかどうかチェック」はできなかった。
https://wandbox.org/permlink/c9QQIkFRPpFHd7rL

505 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 00:55:04.49 ID:E9G/hK4q.net]
void hoge(int& p1, optional<A>& p2 = nullopt) { // constじゃないのでエラー
みたいなことってoptionalで上手いことやる方法ないの?
呼び出し元は
int i;
A a;
hoge(i, a);
hoge(i);
みたいな感じで
書き換えられるけどhogeから抜けたら消える初期値nulloptのoptional<A>をデフォルト値で渡せるのか知りたい

506 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 01:23:25.11 ID:V3EBITWg.net]
なにいってんだおめ

507 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 01:31:37.67 ID:V3EBITWg.net]
nullopt以外が渡されたらそのA&に対して、
nulloptが渡されたらスタックにAを構築したうえでそのA&に対して操作したい、ってこと?

それはvoid hoge(int& p1, A& p2 = デフォルト値)でいけるんじゃないかい

508 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 01:49:32.28 ID:E9G/hK4q.net]
伝わらないようなので、コード書きました
https://wandbox.org/permlink/HyOX0jEBR4glCT01

509 名前:はちみつ餃子 mailto:sage [2021/10/06(水) 03:08:52.59 ID:3d8zh1Pt.net]
>>493
やりたいことは std::optional<A>& ではなくて std::optional<A&> 的なことだろ。
しかし std::optional は参照を保持できないのでそういうときのために std::reference_wrapper がある。
コードにしたらこんな感じ。
https://wandbox.org/permlink/qEaoGDWFh7LmzE4m

510 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 06:31:33.91 ID:lNsYT/rw.net]
部分特殊化できないのは関数テンプレートだよな

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

クラステンプレートなのに弾かれるのは何で?



511 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 06:43:32.28 ID:Cv4NDZSF.net]
その部分特殊化されたtest(構造体)が定義されてないからだね
先にtestの部分特殊化を書けば通る

512 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 07:59:10.51 ID:E9G/hK4q.net]
>>494
std::reference_wrapperは知りませんでした
std::optional<A>をstd::optional<A*>にしてconstのままいじれるようにした気分なので
実質無理ってことなのかなぁと思いますが…
ありがとうございます

513 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 08:17:01.00 ID:fON1wZ9Y.net]
>>475
普通はオーバーロードだな。デフォルトを指定させたいのならnullobjectを始めとする定数オブジェクトかね。

nullポインタとか空のスマートポインタとかはエラーの元だから避けたいところ。

514 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 08:26:08.77 ID:E9G/hK4q.net]
>>497
自己レスです
いずれにしても呼び出し元を変更せずに要件を満たせそうな唯一の方法っぽいので解決ですね
(私は>>475ではありません)

515 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 08:34:45.86 ID:4yqQ2QZ4.net]
今は継承はなるべく使わない、がデフォなのかな

516 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 09:11:04.83 ID:lTl3I+RT.net]
クラステンプレートがナウい

517 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 09:13:14.40 ID:lTl3I+RT.net]
とはいえ、いきなりテンプレートにするのはハードル高いので、
結局は、継承クラスをいくつか作ってみてテンプレート化を試すことになる

518 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 09:41:21.39 ID:DE23Rkof.net]
>>498
> 普通はオーバーロードだな。
これに一票

519 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 10:03:37.43 ID:7OUEgWer.net]
>>489
gcc7でも-O2つけるとダメだね
つけなきゃ一致するけど

520 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 10:45:35.19 ID:Cv4NDZSF.net]
デフォとかナウいとかアホかと



521 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 12:20:32.60 ID:iqYhGyd9.net]
最適化オプションの違いで挙動が変わるようなコードはそもそもダメだって理解してくれよ

522 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 13:11:05.10 ID:BBSbIN5v.net]
インテルコンパイラはもう規格満たしてないだろってくらい滅茶苦茶に挙動を変える
gccなら、最適化で結果が変わるようなコードはダメコードと言って良いと思う

523 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 05:56:22.58 ID:Xasiu/5n.net]
>>496
遅レスすまそ
testなら部分特殊化できるのはわかるんだが
その場合クラス定義の全部を書き直すよな

template<class T1>
struct test<T1, void>
{
void fig1();
void fig2(); //特殊化したいのはここだけ
void fig3();
};

fig1とfig3を一次テンプレートと同じ内容で
書き直さにゃならんかね

524 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 23:05:08.47 ID:xNy0cJty.net]
関数テンプレート内でラムダ式使おうとしたらコンパイルできない

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
と出るが、何がだめなのかよくわからん

525 名前:はちみつ餃子 mailto:sage [2021/10/08(金) 23:18:07.74 ID:ZAq25yo3.net]
>>509
そのメッセージは「関数テンプレートはここで特殊化 (テンプレート引数を当てはめて具体的な型に展開) されたやで」
というメッセージで、普通は他の警告やエラーの補足として出てくる。 なんか警告が一緒に出てない?

func が定義されとるけど使ってないという警告は出てくるけど無視して問題ない警告なのでコンパイルできないってことはない。
警告をエラー扱いにするオプションを付けてたりしない?

526 名前:デフォルトの名無しさん mailto:sage [2021/10/08(金) 23:23:01.42 ID:awgtN1Ul.net]
C+pod
https://toyota.jp/cpod/images/sec1-sld-img2.jpg

527 名前:はちみつ餃子 mailto:sage [2021/10/08(金) 23:28:30.45 ID:ZAq25yo3.net]
>>511
C++20 では std::is_pod や POD の概念自体が非推奨になってるぞ。
次あたりでは廃止されるんとちゃうか。

528 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 21:11:49.30 ID:PhB5rfBq.net]
あるラムダ式が他のラムダ式をコピーするとき、参照キャプチャにするかコピーキャプチャにするか迷うんですが、皆さんはどういう基準で決められてますか

529 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 21:14:22.61 ID:yAn344zh.net]
https://ideone.com/wq0CY8
やたーセマフォできたよ。

これバグってるかな?

530 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 21:17:39.52 ID:yAn344zh.net]
>>513
コピーキャプチャはコピーなので、それ相応のリソースを食う。
基本は参照キャプチャにしている。



531 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 01:44:21.88 ID:qGt3mQky.net]
破壊的代入の余地が無いようする
つまりコピーを第一の選択肢として考えるする

532 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 01:50:32.12 ID:qGt3mQky.net]
*thisはさすがに参照にすることが多いが(だいたいコピコンがあるとも限らないし、
とはいえ参照コピーしてパラメータに対する破壊的代入を許すと思想的に重箱読みになって気持ち悪い気がするし、
参照渡ししたオブジェクトは一般にスレッドローカルとは言い切れなくなることから
スレッドセーフと断言しにくくなるというのは実害に数えて良いと思う
入れ子になったラムダ式の奥深くでそれをやられると、いつ排他制御すべきなのかが全くワケワカメになりかねない

533 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 04:41:44.62 ID:/ScOmKIj.net]
>>516
だとすると一番効果的なのは
C++でコード書くこと自体をやめることだな
あんたの場合は

534 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 07:01:43.04 ID:H3uBjuzu.net]
>>516
コピーキャプチャが第一選択肢という結論は分かるが
それ以外の説明が完全に意味不明

535 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 09:28:13.64 ID:lWUpu20f.net]
意図しない破壊を防ぐにはキャプチャしなきゃいいだけ
それを参照のせいにするゴミはプログラマの資質がない

536 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 09:31:55.66 ID:MbdCJRMe.net]
とりあえずで[&]で書いてるな
丁寧にやりたければ変数ごとに考えて明示する

537 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 09:34:15.67 ID:lWUpu20f.net]
コピーのコストに無頓着なやつは11以後のC++に向かないな

538 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 10:09:31.41 ID:B/tc3JZb.net]
スレッド立ち上げるとかファイル書くとかクソ重い操作が伴う時にコピーコスト気にしてもしょうがない
場合によるとしか

539 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 10:37:13.21 ID:2ZvzU42q.net]
どこでも使う汎用性高いものなら問題が起きる前に[=]にしてる
逆に[&]はよほど安全だと思わない限り使わない

540 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 10:45:00.67 ID:qGt3mQky.net]
>>522
スレッドセーフをどう保証するかに無頓着な香具師はマルチスレッドプログラミングに向かんわ

>>518>>519
低レベルなレスどうも
ラムダ式の成り立ちを知らなかったり
どのように使われるか想像できなかったり
使ったこと無いんじゃね;;;



541 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 10:59:19.31 ID:lWUpu20f.net]
>>525
スレッドがどうたらはおまえさんが勝手に言い出したことで元質問にはない
まさかとは思うがコピーしてりゃスレッドセーフなんて主張はしてないよな

542 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:13:11.28 ID:qGt3mQky.net]
ラムダ式は一般にラムダ式を定義したスコープの外に持ち出され、予見できないタイミングで使われうる
参照キャプチャだと
(1) ラムダ式が使われるタイミングで参照xの参照先が存在することが保証されていなければならない
(2) ラムダ式が使われるタイミングで参照xの参照先へのアクセスが他のスレッドと競合しないことが保証されていなければならない
とゆー2条件をクリアする必要がある。
コピーキャプチャだと(オブジェクトがディープコピーなら)どっちの配慮も不要
参照キャプチャして(1)、(2)を満たして安心できるのは、イミュータブルなオブジェクトだけ……!

543 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:14:48.07 ID:qGt3mQky.net]
>>526
ラムダ式、が含意する事柄について不十分な理解なレスktkr、
危険プログラマー認定のレベル3ぐらいやな;;;

544 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:18:00.19 ID:B/tc3JZb.net]
>>527
ラムダ式をスコープ外に持ち出すなんてレアケースを「一般に」とか言われましても

545 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:28:18.85 ID:2ZvzU42q.net]
遅延評価されるものはよくコンテナに入れて後でぶん回されるから・・・

546 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:28:30.83 ID:qGt3mQky.net]
>>529
定義するのと使う(評価する)のを同じスコープ内でやるならラムダ式使うまでもないじゃん?
ていうか使うまでもないんですよ
>>529はアレな人?

547 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:38:17.37 ID:QniiN4Lz.net]
スコープ内の変数をキャプチャする処理をスレッドで動かす場合は普通にラムダ式を使うと思うが。

548 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:39:34.18 ID:B/tc3JZb.net]
>>531
はぁ?お前これしないの?ラムダ式のユースケースって9割方この類だろ
std::functionに突っ込んではるか遠くにぶん投げたりコンテナに詰め込んだりするのだけがラムダ式の使い道だと思ってるの?
std::sort(v.begin(), v.end(), [](int a, int b){/*...*/});

549 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 11:57:37.17 ID:tv4afNG+.net]
みなさんスレッドセーフにしたいときはスレッドセーフになる様に書きましょう

550 名前:ハノン mailto:sage [2021/10/10(日) 12:13:39.02 ID:KKHdhYPj.net]
>>522
11以前でも



551 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 12:21:43.80 ID:Ld3aFVRt.net]
任意のスレッド安全性を実現するのはゼロコストでは不可能だから
必ずシングルスレッドで実行される保障がある場合などはあえてスレッド安全性を捨てることもある

552 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 12:31:34.49 ID:6/7jGiIK.net]
std::conj() に double を渡したら std::complex<double> にキャストされるのが嫌なので、double を渡したら何もしないで double を返し、std::complex<double> を渡したら std::conj() と同じ動作をするオーバーロード関数 conj() を作ろうかと思うのですがアリですか?

なぜ std::conj() がそういう動作じゃないのか不思議で、何か見落としてたら教えてください

553 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 12:36:51.51 ID:2ZvzU42q.net]
こここ・・こういうこと?

(A)キャプチャが必要でスコープ内で実行までされるケース
(B)キャプチャが必要でスコープ外まで実行が遅延されるケース
(B-1)ラムダ式生成時と実行スレッドが同じケース
(B-2)ラムダ式生成時と実行スレッドが違うケース

(A)なら全員「[&]で問題があるケースはない」と考えている
(B-1)は好みが別れているところ
(B-2)は好みが別れているところで、さらにキャプチャされる変数側をスレッドセーフにするかどうも好み

[&]と[=]がよく分からない人はコチラ
https://ideone.com/OQS113

以下個人的意見
スレッドセーフにするコストは結構高い(開発・実行・保守全てで)ので、競合させずに遅延可能ならそれに越したことはないと考えている
ようはコピーするコストをそれほど高くは見積もっていない

554 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 14:46:42.08 ID:lWUpu20f.net]
>>528
日本語でおk

555 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 16:03:29.39 ID:lWUpu20f.net]
>>538
おまえさんの論法では同時並行はすべて別プロセスにすべきってことだな

556 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 16:49:17.57 ID:2ZvzU42q.net]
>>540
う〜ん、伝わらないですね・・・
共有リソースに競合するアクセスがなければ排他制御の必要がなく、スレッドセーフにする必要がないってことです
そもそもコピーして共有しないことで排他制御が必要なくなれば、スレッドセーフにしなくていいという考え方ですよ

557 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 16:51:53.70 ID:lWUpu20f.net]
だから共有=リスクなんだろ?
もうマシンも別の実機にすれば最強防御じゃん

558 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 17:01:53.15 ID:2ZvzU42q.net]
>>542
残念ですが理解してもらうことは諦めます

559 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 17:32:07.51 ID:qGt3mQky.net]
>>533
頭の中がgdgdな人が話をgdgdにしようとしていまつね……
std::sort()の呼び出しと同じスコープが終わった後に
[](int a, int b)が呼び出されないということは、単にstd::sort()がreturnするまでにラムダ式を忘れてくれる作りだから(たまたま)担保されているだけであって、
[](int a, int b)のスコープが限定されるために担保されているわけではないし、
[](int a, int b)がラムダ式だから担保されているわけでもないの。

つまり、>>533
>ラムダ式をスコープ外に持ち出すなんてレアケース(>>529
の根拠に全くなっていないワケ

560 名前:はちみつ餃子 mailto:sage [2021/10/10(日) 17:47:25.28 ID:cCUvKLuJ.net]
レアケースがどうこういったところでレアケースなら考えなくていいってわけでもない。
そんなの個別の事例ごとに考えるしかしょうがないだろう。



561 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 17:56:25.23 ID:lWUpu20f.net]
>>543
無理筋の主張ってことがわかってもらえたならいいよ

562 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 18:04:09.07 ID:2ZvzU42q.net]
>>546
無理筋ではありませんよ
スレッド以前から並列処理で共有される実行コンテキストを分けることは大昔からやられてきました
今更その手法自体を想像できない人に、こんなところで説明するのは困

563 名前:なだけです []
[ここ壊れてます]

564 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 18:11:49.41 ID:lWUpu20f.net]
おまえさんの言う「大昔」がどのくらいか知らんが
俺が若手の頃はRENT,REUSなんてやってたよ

565 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 18:25:30.38 ID:Euz3vWgQ.net]
ラムダ式によって作られたオブジェクトがキャプチャされたオブジェクトより長生きする可能性があるならコピーキャプチャ
そうでなくともレジスタに乗ると思われるならコピーキャプチャ
そうでない場合に初めて参照キャプチャ

排他に関してはshared_ptr<mutex>とshared_ptr<なかみ>をメンバに持たせてコピー可能にしつつ、メンバ関数経由で排他制御するのが筋だと思う
RustのArc<Mutex<T>>パターンに影響されすぎかもしれないが……
いずれにせよキャプチャと排他制御の問題とは切り離して考えることができるし、そうすべき

566 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 21:19:12.50 ID:MbdCJRMe.net]
ラムダ式関連でいうと参照とかコピーをデフォルトだけで指定したときも実際に使ったものの分しかクロージャオブジェクトのサイズに乗ってこないと思ってるんだけどヤバい?

567 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 23:42:34.57 ID:9PtWfEC6.net]
>>550
むしろ他に何が乗ると思っているのか?
気になるなら生成コード見て確認すればいいだろうとも思うし。

568 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 23:58:18.57 ID:2ZvzU42q.net]
>>548
大昔とは1990年頃の話です
COBOLなのか知りませんが、reentrantとreusableは今回の話と直接関係ありません

569 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 02:51:41.68 ID:1CVjhT+M.net]
>>551
cppref見たらクロージャオブジェクトのサイズは未規定とあって気になった

570 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 05:43:06.87 ID:FIUH1xZN.net]
>>552
関係大ありだよ
あの当時はアセンブラでC++は使ってなかったというだけだ
わかってないのおまえさんだな



571 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 07:43:50.36 ID:M/9mFHzI.net]
>>554
説明するべきでないのが残念ですが、その頃からあなたが分かってなかっただけですよ

572 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 07:52:27.26 ID:pMbZgi1h.net]
>>555
おまえさんがどう思おうと勝手だが
センターオウンコーディングとかやってたよ
マウント取られる気が全くしねえぜ

573 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 08:08:27.81 ID:M/9mFHzI.net]
>>556
マウント取る取らないとかどうでもいいです
あなたが理解できないのをどうにもできないだけなんです

574 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 08:46:34.77 ID:pMbZgi1h.net]
と言うことにしたいのですね

575 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 09:17:45.21 ID:G+wdAsto.net]
リエントラント目指してもいいじゃないの

576 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 09:58:01.98 ID:F+cmXQty.net]
クラスの型を自動変換して関数に入れるにはどうすればいいですか?例えば、

class A {
public:
double hoge;
};
class B {
public:
int hogehoge;
};

int function(A aaa);

があった時に、functionにB型を入れても動くようにしたいです。
クラスAのソースに、Bから生成するコンストラクタ書ければいいのかもしれませんが、
実際はAはライブラリのクラスで触れなくて、Bが自作のクラスになります。

577 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 10:22:18.86 ID:T3qmZxdk.net]
>>560
Bを受け付けるfunctionを書くんや

578 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 10:50:11.05 ID:QW1mycSW.net]
B extends A
としたら
function
の引数をキャスト?で動かない?

579 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 10:54:01.94 ID:RUUSz/4T.net]
簡単や
template<class A>
int function(A aaa);

580 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 12:11:05.48 ID:F+cmXQty.net]
できました。ありがとうございます。

また、ポインタのvectorを実体として使うにはどうすればよいでしょうか?

std::vector<A*>
で定義されてるものを、
std::vector<A>として使いたいです。
別のvectorにポインタ値を詰め直せばいけると思うのですが、元のポインタの場所のまま実体で使いたいです。無理でしょうか。



581 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 12:31:51.97 ID:T3qmZxdk.net]


582 名前:参照を使うんや []
[ここ壊れてます]

583 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 13:03:47.84 ID:NaSXzxBw.net]
参照のvectorなんて作れたっけ?

584 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 13:16:00.26 ID:T3qmZxdk.net]
reference_wrapper使うんや
まあ下らんこと考えんほうがええ

585 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 17:28:01.69 ID:0Mn4AOx6.net]
>>564
ややこしい所有権・所有責任問題が発生するから、ソースコードを見直したほうがいい。
具体的にはstd::vector<*A>を
std::vector<std::shared_ptr<A>>
にして、shared_ptr<A>をやり取りするようにすべきだな。

性能問題とか互換問題とかでも無ければvector<*A>なんて使うもんじゃない。

586 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 20:43:04.76 ID:bPHZE8G4.net]
言ってることは同意だが、ポインタの型もまともに書けないような人に言われても説得力がない

587 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 20:47:36.58 ID:c9XBGwkD.net]
Rustと間違えたんじゃね

588 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 22:25:40.15 ID:RUUSz/4T.net]
簡単や
std::vector<std::shared_ptr<A>>

589 名前:デフォルトの名無しさん mailto:sage [2021/10/11(月) 23:13:38.91 ID:9gfKW03X.net]
ドラクエ3のバージョン違いの謎に迫る!
https://www.youtube.com/watch?v=sh5GXYs6T1c
2021/10/01に公開済み

FC版DQ3には、AバージョンとBバージョンが存在する
今回はROM内のプログラムを徹底比較!
どこが違うのか白黒ハッキリさせると息巻いた内藤プロ
当時自分が作ったのに全て忘れてて大変なことに・・

590 名前:デフォルトの名無しさん [2021/10/12(火) 04:13:48.50 ID:jMkI4z1q.net]
ぶっちゃけ継承とかポリモフィズムはオワコンでテンプレート最強?



591 名前:はちみつ餃子 mailto:sage [2021/10/12(火) 04:25:26.30 ID:WB1ScBpO.net]
>>573
過去の C++ の流行においては継承が強調されすぎたこともあって
継承の害悪な面も見えて大幅な揺り戻しは有った。

しかしそれぞれに役割があるのでどれかが廃れるとかいう話ではない。
バランスとしては継承が控えめになったけれど、だからといって継承のない C++ はありえない。
結局のところそれぞれを適切に使えというだけのこと。

592 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 06:45:14.85 ID:LoAbYEbi.net]
継承が有効に使われている事例をひとつも知らないヒヨっ子丸出しな質問だな
テンプレートの何がいいのかもわかってなさそう

593 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 07:03:36.18 ID:bL2VfUhD.net]
CRTPとか見たら脳を壊しそう

594 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 07:24:36.11 ID:+oJUuDWk.net]
>>576
virtual使えないor使わない処理系で、使ってみたけど確かに頭にスッキリ入らんパターンだわw
あれはあれでポイントで使うと便利だし、反対にやっぱvirtualも便利でいいよねーとか。

595 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 08:16:42.08 ID:4AIb2U7h.net]
>>573
メソッド共通化を実現するための継承はオワコン。
プレースホルダーを用意するための継承は現役。

総称型が実装されれば継承自体をオワコンにできそうな気がするけど、総称型風スマートポインタて無かったっけ?

596 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 08:20:36.96 ID:vDVhyOYS.net]
耳が腐る

597 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 09:51:23.11 ID:kjIGaWla.net]
何でこんな荒れてんの?

598 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 10:09:23.54 ID:qN1bonoC.net]
いつものこと

599 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 10:40:17.54 ID:kjIGaWla.net]
単発荒らしか

600 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 04:27:45.44 ID:yxtzEQdj.net]
void * の生ポが最強



601 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 07:29:48.53 ID:w2mbz/VV.net]
○○なんていらねーよ害悪だけだ
まだ使ってるやつは全員バカ
これからは△△を使うべきだ
なーんて言っちゃってマウント取った気になってるおめでたいやつ
メガトン級にアホにされてることに気付かねえよな

602 名前:デフォルトの名無しさん [2021/10/13(水) 09:41:39.46 ID:V99uCirA.net]
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されてるならこれは関係無いと思いたい)

603 名前:デフォルトの名無しさん [2021/10/13(水) 09:47:25.08 ID:V99uCirA.net]
ああこれか
https://cpprefjp.github.io/reference/random/random_device.html
>GCC (MinGW): GCC 9.1までは擬似乱数生成器 mt19937 を用いるため使用を推奨しない。詳細は備考欄を参照。GCC 9.2からは暗号論的な乱数である rand_s を使用する。

604 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 10:51:16.02 ID:ocY7/s3a.net]
偏りを判断する目が偏ってるのでは

605 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 12:39:29.13 ID:L2HfUVD6.net]
random_deviceがダメな環境でrdtsc命令使ったことあるな
良いやり方かは知らん

606 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 16:09:05.50 ID:SuRXriSW.net]
https://cpprefjp.github.io/ って
https://ja.cppreference.com/ があるのになんで使われてるの?

607 名前:はちみつ餃子 mailto:sage [2021/10/13(水) 16:23:55.69 ID:6cp7j/AO.net]
>>589
前者は編集者による解説なども含んでいて仕様の意図や習慣がわかりやすい。 実装の現実みたいな補足もあるし。
後者は仕様書の再編を指向してるから正確だけど規則の羅列を読むのがしんどいこともある。

適宜使い分けて。

608 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 16:49:55.63 ID:SuRXriSW.net]
>>590
ありがとう

609 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 00:25:54.44 ID:unU20Liw.net]
逆にjaはほぼ見ないな
cpprefjpかen

610 名前:デフォルトの名無しさん [2021/10/14(木) 17:38:44.33 ID:0xmYH4RJ.net]
みんなで広げよう友達の輪
https://github.com/cpprefjp/cpprefjp.github.io



611 名前:デフォルトの名無しさん [2021/10/14(木) 19:08:30.88 ID:D5VUtH01.net]
今までJavaでやってきたけどC++もやってみたいんだよね
すぐ出来るようになると思う?

612 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 19:10:28.43 ID:u3valL3D.net]
>>594
ならない
C言語のポインタや文字列について勉強したほうがいい

613 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 19:12:47.65 ID:pMO89bX6.net]
>>594
c++でちょっとした文字列パースして内容に応じたオブジェクト構築する処理書いてたの、
ほぼ使ったことないJavaに移植したらスゲー早く出来てワロタ。C#もサクサクできたな〜
逆は色々イラッとするんじゃねぇかな?

614 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 01:29:52.42 ID:oSpeFu2A.net]
元々C++はその辺の文字列処理を毎回1からゴリゴリ書くような言語じゃなくて何らかのライブラリを利用するものだと思うけど、
クロスプラットフォームで各種文字コードが自由に扱えて、c++11以降の仕様に対応してて、かつかゆいところに手の届くライブラリって意外とないんだよね
いや、俺が知らないだけかもしらんけどw

615 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 05:56:29.15 ID:JZ8LRo6T.net]
実質的な標準と呼べるものは今もないよ

616 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 09:26:39.59 ID:c8xS1fS2.net]
>>596
std::regex使ってようやっと、かね。

c++はいつまでたっても文字列処理苦手なままだわ。

617 名前:デフォルトの名無しさん [2021/10/15(金) 10:21:28.25 ID:Sjupi756.net]
Javaから入ると不能(陰ポ)になる
もう手遅れ

618 名前:デフォルトの名無しさん [2021/10/15(金) 10:22:26.59 ID:Sjupi756.net]
>>597
wxWidgets

619 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 10:26:50.27 ID:Eg3Mb3n8.net]
あれ出来上がるバイナリ重すぎなんだけど、今は違ったりするのかね

620 名前:デフォルトの名無しさん [2021/10/15(金) 11:49:16.16 ID:Sjupi756.net]
Debugだとバカデカくなるけど
Releaseは気にならないレベル
(DLL除く)



621 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 11:53:45.11 ID:JZ8LRo6T.net]
std::regexと等価なインターフェースを各々の正規表現ベンダーが用意してくれればいいんだが、それすら実現されていないお寒い状況

622 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:03:59.88 ID:XHojpqKh.net]
>>599
その辺も無いわけじゃないんだけど、クラスの構造どうしようかとか、メモリ管理どうするかとか、
変態trmplateでパズルしてみようかとか、選択肢多い分考えることも多い部分で時間かけることが
多い所はあるなーって。それがC++使いたい動機の裏返しでもあるんだけど。
あと本人の問題120%だが、ボケて油断してると、エラー直すのにやたら時間かかったりで。
Javaとか詳しく知らん状態だから言えるのかもしれんけど、もうこうするしかネェってレールが
最初からあるような印象でした。つかオラクルのライセンス問題のほうがムズいw

623 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:19:11.94 ID:Q47teFml.net]
等価って図々しいだろ

624 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:34:03.36 ID:Ax3dDCZ3.net]
std::regexみたいな文字コードというものがあることを知らない人間が作ってそうなものを標準だと思ってつかうのはやめたほうがいいと思います

625 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:53:35.21 ID:JZ8LRo6T.net]
char8_tが導入されたんだからutf-8しばりでいいじゃない

626 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 13:14:36.67 ID:x+xcCYcO.net]
なんか最近曖昧な上に突っ込む点多すぎる内容的にはどうでもいい話題が多くない?

627 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 13:33:42.62 ID:ma4A3Lrr.net]
>>607
utf8限定ならそこそこ。
もうutf8がデファクトだから、内部処理はutf8に統一した方がいいよ。

628 名前:ハノン mailto:sage [2021/10/15(金) 19:29:27.64 ID:0K4QrynR.net]
>>608
内部コードは utf-32 でやっているので、utf-32 縛りのほうがうれしいです‥

629 名前:デフォルトの名無しさん [2021/10/15(金) 19:56:39.74 ID:JZ8LRo6T.net]
>>611
はぁ?
std:::basic_regex<char8_t>、std::basic_:regex<char16_t>, std:::basic_regex<char32_t> のどれでも好きなの使えばいいじゃん

630 名前:デフォルトの名無しさん [2021/10/15(金) 20:01:47.12 ID:JZ8LRo6T.net]
ところで、char16_t、char32_tってエンディアンはシステム依存しばり?



631 名前:デフォルトの名無しさん [2021/10/15(金) 20:03:20.51 ID:eqKsqNtm.net]
ちなみに、いま使えるみたいですよ。
むかしは使えることになってるのに実際は使えなかったんだけど。
自作イテレーターにも対応してるようです。
アップルは知らんけど。
Ubuntu+gcc、Windows10+clでは自作イテレータでstd::regex<>が使えました。
これは、HTML、XML、JSONのデータ構造からコンテンツ内のみを検索のような事に使えます。
標準から外れるような議論もあるそうですが、便利なので外れないように抗議していきましょう。

632 名前:デフォルトの名無しさん [2021/10/15(金) 20:12:21.03 ID:eqKsqNtm.net]
C++20でchar8_tが入ると便利になりますよね。

633 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 20:12:58.12 ID:Q47teFml.net]
>>613
規定しない
なのでそういうのはそこでは気にしない

634 名前:デフォルトの名無しさん [2021/10/15(金) 20:35:46.40 ID:eqKsqNtm.net]
STLはセントルイスの略。
では、GCCは何処でしょう?

635 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 20:50:28.66 ID:R98eOYn2.net]
つまんね

636 名前:デフォルトの名無しさん [2021/10/15(金) 21:40:43.65 ID:HBylJ5Wv.net]
平面3リンクマニュピュレータの逆運動学のプログラミングが分かりません。
キーボードで手先の位置を入力すると、関節角が表示されるようにしたいです。
scanfを使うのと、アームの長さなどは適当に決めていいという条件です。

わかる方いたら、送って欲しいです。

637 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 22:21:16.57 ID:fUsvamq4.net]
>>619
どこの大学のなんていう授業か教えてくれたら送ってあげる

638 名前:デフォルトの名無しさん [2021/10/15(金) 22:41:19.44 ID:HBylJ5Wv.net]
大した大学ではないです。ロボット工学です。

639 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 10:16:02.78 ID:pBeCkfuy.net]
>>619
冗長マニピュレータで一意に求まらん。制約条件設けてるはずだが。

640 名前:デフォルトの名無しさん [2021/10/16(土) 11:55:15.40 ID:NekA8urB.net]
>>622
リンクの長さは良さそうな値を定義してください。関節の座標はこちらで決めずにあくまでも手先の位置・姿勢であるxed、yed、φedから計算で出します。解が複数出てくるので、全ての候補を求めてください。
例えば、リンクの長さは根元から順に0.3m、0.3m、0.05mなどで良いです。
プログラムとしては手先の目標値を入力して、θ1、θ2、θ3が出力されればOKです。



641 名前:デフォルトの名無しさん [2021/10/16(土) 12:05:17.39 ID:NekA8urB.net]
>>622
目標値は、x=0 y=0.3m φ=90degがいいと思います。先ほどのリンクの長さの設定値で楽な姿勢でロボットの手が届く範囲ですので。

642 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 12:08:52.99 ID:pBeCkfuy.net]
>>623
手の姿勢まで指定してて >>619 と違う問題になってんじゃん。どんなテキストにも解法載ってる問題丸投げしてんだな。

643 名前:デフォルトの名無しさん [2021/10/16(土) 12:14:57.04 ID:NekA8urB.net]
>>625
テキストに載ってないからここで質問してるんですよ。手の姿勢は例えばの話ですよ。どっちみちscanfで入力するんですから。

644 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 12:22:50.77 ID:pBeCkfuy.net]
>>626
問題が違うっつうの。
ロボット工学のテキストには必ず載ってる。よく読めアホ。

645 名前:デフォルトの名無しさん [2021/10/16(土) 12:35:46.33 ID:NekA8urB.net]
>>627
日本語分かる?プログラムは載ってないから。教科書に載ってるから見ろって丸投げしてんのどっちだよ。

646 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 13:20:33.97 ID:N8k1BZc2.net]
>>628
お前だよどう考えても

647 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 13:59:18.07 ID:Ilt9CI+j.net]
答える価値がないと思うなら放置しろよ
くだらねえ煽りやってんな迷惑だ

648 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:12:30.56 ID:pBeCkfuy.net]
>>628
プログラムが載ってるわけねえだろ、アホ。
載ってんのは**解法**(>>625)

649 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:15:24.70 ID:1x8IpOH2.net]
> どっちみちscanfで入力するんですから。
このレガシーさには誰も何も思わんの?笑

650 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:21:35.71 ID:gJanIysk.net]
ssfanf_s()を使った方が(%sとかについて)ちょっと安全



651 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:31:10.24 ID:ex7yhveJ.net]
安全性の話じゃねえだろ

652 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 21:53:50.46 ID:EatL4YvD.net]
わざわざC++なんか使っときながら勉強不足でモロアンチパターン踏んでるバカ
よくいるよね

653 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:09:18.72 ID:n5lzAHDj.net]
どういうの?

654 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:14:18.41 ID:gJanIysk.net]
やっぱ普通fgets()して1行全体を読み込んでからstrtok_s()使いマスヨネー

655 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:16:29.16 ID:gJanIysk.net]
文字列の数値化はstrtol()、strtoul()、strtof()、strtod()をオーバーロードしたwrapper関数を呼ぶテンプレートにすれば
cinと同等の型安全性と同等以上の使い勝手が実現にできるし、

656 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:41:33.15 ID:VgkITY1O.net]
C++な人ってゴリゴリ自分でBNF的なparser combinator書くイメージだな
わざわざcstring使う人はいない気がする

657 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:45:41.19 ID:gJanIysk.net]
いろんな人の手を経たプロジェクトだと CString(Windows) と std::string
(ていうか正確にはstd::basic_string<TCHAR>)が混在しがちなのがほんのちょっと悩みどころ

658 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:46:44.02 ID:VgkITY1O.net]
えーっと・・・cstringはC言語のstring.hのことだよ

659 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:53:12.21 ID:gJanIysk.net]
しらそん
いちいち
#ifdef __clusplus
# include <cstring>
# include <cmath>
#else
# include <string.h>
# include <math.h>
#endif
みたいな書き方するん会、

660 名前:デフォルトの名無しさん [2021/10/16(土) 23:54:09.02 ID:6ga3nra2.net]
json文字列として入力データを受け取って既存のjsonライブラリでパースするのが無難じゃないですかね



661 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 09:22:32.00 ID:4Zt4uwKf.net]
C++でfgets使うアホの世界チャンピオンがいるな

662 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 09:40:16.91 ID:Rn6uB4uI.net]
壊れても居ないものを直そうとするヴァカに言われたくはないし、
行の長さが定まっていないみたいなアフォな外部データ設計でない限り
fgets()で軽くて十分

663 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 09:48:08.24 ID:4Zt4uwKf.net]
直すって何を?
ああ、おまえさんの頭か

664 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:05:04.47 ID:cds0CTiX.net]
今ならメモリ不足とか気にする必要はほぼないから、
fgets()よりも、テキストファイル全体を一気に読み込んで1行分をstring_viewで返していく、みたいな流れの処理の方が効率は良いはずだよね

665 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:06:37.70 ID:XrR+wpGu.net]
MSVCのfgetc()とfgets()は実行速度が遅い

666 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:19:23.83 ID:Rn6uB4uI.net]
>>646
ちゃうちゃう、目新しいという以外にメリットも無いのに飛びつく誰かさんの方

>>647
行の長さが定まっていない仕様というのは大変恐ろしいことでありまして、
40TBの入力も許容するという意思表明なのであります

667 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:23:35.72 ID:XyIQiUpb.net]
どれもこれもザックリすぎて話にならない

668 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:24:11.36 ID:Rn6uB4uI.net]
こと外部データに関しては、読み込み終えないとサイズがわからない、みたいな仕様は悪手
で、異常な入力に対してエラー出力するプログラムは正しいが
クラッシュするのはバグ
という観点からすると、動的メモリ確保による不定長読み込みができると言っても活かしようが無く、
結局fgets()でいいやん?となる

669 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:27:15.30 ID:XyIQiUpb.net]
fgets使うくらいならOS固有の関数を呼ぶべきだと思う
readとかReadFileのことね

670 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:30:16.75 ID:Rn6uB4uI.net]
>>652
バッファリングを自力で実装するんか……
デバイスドライバ側である程度何とかしてくれるケースもあるかもしれんが



671 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 11:30:46.37 ID:0m7FLjXf.net]
>>652
ええ…

672 名前:デフォルトの名無しさん [2021/10/17(日) 11:47:07.94 ID:XrR+wpGu.net]
真理情報:fgets()はUTF-16やUTF-32のテキストファイルを正しく読み込めない

673 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:13:01.70 ID:0m7FLjXf.net]
ワイド文字用の関数は使っちゃだめということ?
まあ使い方よくわからんけど

674 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:16:45.02 ID:XrR+wpGu.net]
HTMLなりXMLなりJSONなりそれぞれパーサーがすでにあるのだからその恩恵を享受するのがナウなヤングの取るべき道でしょ

675 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:21:07.90 ID:4Zt4uwKf.net]
>>652
俺ならCreateFileMappingを使う

fgetsなんて頭の更新が止まった昭和時代の

676 名前:サ石のうちでも地頭までひどいやつの使うものだな []
[ここ壊れてます]

677 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:21:44.62 ID:cds0CTiX.net]
>>656
ワイド文字は環境によってUTF16だったりUTF32だったりで仕様が定まらないので使いにくい

678 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:22:29.87 ID:XyIQiUpb.net]
>>658のような勝手にmmap使っちゃうようなのがいるとバグだらけになるよ

679 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:24:50.71 ID:XrR+wpGu.net]
Java、Python、Ruby、Javscriptなどの他言語にファイル読込み処理を移植する徒労を考えないバカが集うスレはここですね

680 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:25:21.31 ID:jNwhUFcS.net]
>>ID:NekA8urB の丸投げ君、己の課題であることを伏せて、お題スレに出題!



681 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:27:57.21 ID:MD8jEcOV.net]
ここまでifstreamの話なし

682 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:28:53.83 ID:PatMwtBc.net]
組み込みに近いところいると、大抵自炊に近い状態になるわ。
たとえばiostreamコンパイル通るやん、ってリンカがフラッシュ容量超えを宣告しやがる(フラッシュが640KiBもある豪華マイコンやで)。
上の方でrandom_deviceカスタマイズするの簡単にでけんやん、とか。ハード乱数なんて別にクラスに押し込んでも意味薄だけど。

683 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:29:39.45 ID:4Zt4uwKf.net]
>>661
他言語に移植するかどうかはおまえさんが決めることじゃないよ
プログラム技術板で下品な言葉に頼るのは低脳の証明だぜ

684 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:29:57.14 ID:XyIQiUpb.net]
C++の標準ライブラリを使用しない前提でファイル読み込みを考えるならOS固有の関数を呼ぶべきって言ってるだけだよ
C++の標準ライブラリを使用しないでCの標準ライブラリ呼ぶには何か正当な理由がいると思う

685 名前:デフォルトの名無しさん [2021/10/17(日) 12:35:21.04 ID:QqhGhKAl.net]
標準ライブラリのストリームは遅延評価やらなんやら余計な思惑が付いてるのでとにかく重い。

686 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:36:36.60 ID:Bq9qBgnd.net]
>>666
<cstdio>はC++標準ライブラリの一部だよ

687 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:36:58.22 ID:0m7FLjXf.net]
readもfreadもposixじゃろうよ
変わらんよ

688 名前:デフォルトの名無しさん [2021/10/17(日) 12:37:50.89 ID:QqhGhKAl.net]
APIならサクサク快適。
1Gbps/s出る。
標準ライブラリは500Mbps/sくらいしかでない。

689 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:39:23.66 ID:0m7FLjXf.net]
>>670
なんだよapiって

690 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:41:11.30 ID:XrR+wpGu.net]
システムコールと言いたかったんだろうよ。察して差しあげろ



691 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 12:41:18.69 ID:XyIQiUpb.net]
>>668
C++からCの標準ライブラリを呼ぶならこちらを使えという意味

>>670
そういうのは具体的な根拠の提示が必要

692 名前:デフォルトの名無しさん [2021/10/17(日) 12:45:16.88 ID:QqhGhKAl.net]
>>673
俺は見たんだ。

693 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:12:31.90 ID:4Zt4uwKf.net]
>>660
mmap+おまえさん→バグ
という化学反応みたいなもんか

694 名前:デフォルトの名無しさん [2021/10/17(日) 13:26:14.73 ID:GKP6XQtx.net]
fgetsはバイトを扱うのか文字を扱うのか分かりにくいよね
Javaはバイトを読むInputStreamと文字を読むReaderに分かれてる
ファイルは当然文字だからInputStream、上位のReaderで文字コードや改行コードを加味する

Cはバイトも文字もchar[ ]で扱うからAPIもバイト扱い・文字扱いが混在してる
fgetsは改行コードで区切るからバイトではなく文字を扱う関数のように思えるけど、実際は文字コードなどは考慮されないのでバイト読み取り程度にしか使えないしワイドキャラクタも扱えない
中途半端だと思う

695 名前:デフォルトの名無しさん [2021/10/17(日) 13:26:48.31 ID:GKP6XQtx.net]
ファイルは当然文字

696 名前:デフォルトの名無しさん [2021/10/17(日) 13:27:18.36 ID:GKP6XQtx.net]
じゃなくて
ファイルは当然バイトね ごめん、、

697 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:44:25.91 ID:mjSP52s5.net]
>>676
時代背景も考えずに中途半端とか言われても…

698 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:48:20.62 ID:cds0CTiX.net]
まぁ、欧米の毛唐どもにもようやく必要性が理解できたchar8_tの導入が進めば文字コードはutf8に統一されていくとは思うけど、
utf8はutf8で冗長コードの問題があるからな…その辺のルールも統一しとかないとバグが量産されることになるな

699 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:54:50.76 ID:XrR+wpGu.net]
2021年になってもテキストファイル読み込みの話をしなければならないC++の哀しさ

700 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 13:58:16.96 ID:7C23oe5i.net]
ifstream とか
#include <iostream>
とか観るとダサいなーとしか思わない



701 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 14:06:15.29 ID:XrR+wpGu.net]
Windowsのcode pageのような列挙型と文字セット判定クラスがC++で標準化されてないとテキスト読み込み処理を標準化できないでしょ
文字セット判定クラスは既存の判定ライブラリも標準インターフェースを介して使えるように的な

702 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:21:43.52 ID:X4C5aaqV.net]
すまんもうPythonでよくね

703 名前:ハノン mailto:sage [2021/10/17(日) 21:41:38.58 ID:iZHfLY3S.net]
>>684
せやね

704 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:17:36.06 ID:SjUVJOBm.net]
C++ではなくCを使うというならまだそいつなりに筋が通る可能性があるが
C++でfgetsにしがみつくのはC++のライブラリについてこれなかっただけの
無能の中の無能だ

705 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:27:56.24 ID:guTQadjs.net]
C++でファイル操作にcstdio(というかFILE*)を使うべきだと宣うなら
せめてその場合の例外安全性くらい論じてくれないと話にならな

706 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:44:19.97 ID:G16mKgJ/.net]
>>658
Create !
File !
Mapping !
なんでテキストファイルを読み込むだけのためにそんんあ牛刀(しかも移植性が乏しい)を使わねばならんのじゃ……
だいたい標準ストリーム(istream/ ostreamでも良いが)との結合はどうするんじゃ……
std::streambuf派生クラスとか自力で書くんか……

やっぱ頭にうんこ詰まってる人からはうんこしか出てきませんね……

707 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:47:04.30 ID:G16mKgJ/.net]
>>686
fgets()の使用はC++についていけなくてしがみついているのではなくて、
天才の判断である

708 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:52:03.70 ID:SjUVJOBm.net]
>>688
あーおまえさん、あのAPIをベアで使ってるのか
ご苦労なこったな
C++使ってんのにクラス化って発想ねえのか

709 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:56:09.77 ID:G16mKgJ/.net]
>>687
>例外安全性くらい論じてくれないと
cstdioの仕様は突っ込んで調べてはいないがファイルの読み書きに関して
例外をスローすることがあるとしたら改悪で大層な失敗ライブラリとしか言いようが無い

ていうか例外安全というのは眉唾な概念でありまして、
40TBまでメモリを食いつぶしたら例外をスローするが
39.9999TBまでメモリを食いつぶしても何も起きないというコードは
システム全体の動作を担保できておらず設計したとは言えない
もっと定量的にプロアクティブな処置を講じるべきで、システムの正常動作を例外に依存させる設計は無い

710 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:57:48.58 ID:G16mKgJ/.net]
>>690
ますますのうんこ発言ご苦労
で、標準ストリーム(istream/ ostreamでも良いが)との結合はどうするんじゃ……



711 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 08:00:37.32 ID:pufTxU/Z.net]
標準じゃないとか言うから突っ込まれてるのに

712 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 08:13:52.41 ID:G16mKgJ/.net]
この議論の中で自作クラス推しはポエミーすぐる
やっぱうんこ製造機な人は仕方が無い

713 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 08:23:54.90 ID:SjUVJOBm.net]
>>892
おまえさん他言語への移植がどうたら言ってた?

714 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 09:00:47.23 ID:SjUVJOBm.net]
C++でクラス作るなって
Cで関数作るなに匹敵するすげえ主張だな
最長不倒main関数とかw

715 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 10:44:23.86 ID:Qq+Ry0m8.net]
Cだけやたら詳しくてクラスの仕組み知らないウン古参とか居るからな

716 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 11:01:27.83 ID:I7uU9DyP ]
[ここ壊れてます]

717 名前:.net mailto: MISRA-C 縛りの組み込み屋とかな []
[ここ壊れてます]

718 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 11:20:29.21 ID:PPwA/bGd.net]
C++からCにソースコードを移植せざるを得ないことがあるから、Cプログラマでもクラスやテンプレートの知識は必須でしょ

719 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 11:27:00.40 ID:CHllzYZP.net]
cの場合ファイルでクラスを実現するわけだけど、その縛りがある方がきれいになるよね

720 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 11:35:56.70 ID:cow76Y8p.net]
twitterでCやC++を検索したい時、検索ボックスに
(C 言語) OR cplusplus OR cpp OR @i -@i lang:ja
と入れると割りといいことが分かった。
さらに、検索ボックスの右にある「…」のボタンを押して「検索を保存」しておくと、この検索文字列が勝手に消えない。



721 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 13:03:36.15 ID:nWV7c8cM.net]
::fgetsってstd::getlineに対するメリットある?

722 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 13:40:59.86 ID:inWWc53E.net]
getlineがそもそも遅くてダメ
fopenからのfread一択

723 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 15:14:30.34 ID:PPwA/bGd.net]
$ man 3 getline
...
BUGS
There are no wide character versions of getdelim() or getline().

724 名前:デフォルトの名無しさん [2021/10/18(月) 15:52:23.39 ID:r9t2S6+p.net]
>>703
fread速くて素敵

725 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 15:58:38.18 ID:bmSCfWZq.net]
fopen/fread/fseekだと2GBを超えるファイルが扱えないよね

726 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 16:22:14.95 ID:SjUVJOBm.net]
2G超のファイルはもう珍しくもなくなったな

727 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:03:20.24 ID:PPwA/bGd.net]
>>706
fread()は2GB制約なく扱えるのでは?

728 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:10:28.52 ID:SjUVJOBm.net]
狭い視野でイキッてるヒヨッ子

729 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:38:54.73 ID:bmSCfWZq.net]
>>708
環境によってはそういう実装もあるだろうけど、保証はされていないはず
実際MSVCのランタイムとかはダメでしょ

730 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:53:44.83 ID:wnQbvQnY.net]
2GBってOSの制限じゃなくて?



731 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:56:34.12 ID:PPwA/bGd.net]
>>710
「ダメでしょ」っていう無駄な煽り質問じゃなくて、fread()の制約について触れたブログのURLとか教えてもらえますか?

732 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:12:41.63 ID:SjUVJOBm.net]
MSVCつってんだろ
そっから自分で調べろよ

733 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:19:55.17 ID:PPwA/bGd.net]
>>713
見つからないンだわ

734 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:20:14.22 ID:q3S383yy.net]
>>699
>C++からCにソースコードを移植せざるを得ないことがあるから、

いまどきそんなのある?思いつかない。

735 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:40:37.41 ID:guTQadjs.net]
>>691
違うよファイル読み込み以外の場所での例外発生時にFILE*をリークさせないための設計の話だよ
君が何も考えてないのはよく分かった

736 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:48:11.38 ID:9/kwvMtE.net]
>>711
今時のOSで2GBの壁とか無いでしょ

737 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:52:27.87 ID:PPwA/bGd.net]
書いてから気づいたけど >>714 は、見つからねンだわ、のほうがよかった

738 名前:デフォルトの名無しさん [2021/10/19(火) 00:01:14.73 ID:L2ZQN19z.net]
MSVCのランタイムでfread()が2GB越えファイルを扱えないって話のURLはどこですか?

739 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 00:34:16.59 ID:FM0S3WDg.net]
>>716
スコープを抜けたらファイルをクローズしてくれるから安全、と考える
藻前の考えが浅いのもまた明らかだ
システム的にファイルをぶち切られること自体が致命的だったら?
また、クローズがエラーになったとき何が起きるか
(ただクローズするだけのクラスならエラー通知先は無い。例外を飛ばしたら即パニック

というわけで実用的なリソースリーク対策はコードの追加を伴うから
fgets()にリーク対策するのと言うほど違いが無いワケ

740 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 00:41:16.25 ID:FM0S3WDg.net]
例外安全はやれるならやった方が良いのは認めるが
他人様が作ったライブラリの中に生ポをメンバにもつクラスがあったら穴ができる
まだこれぐらいなら静的解析で発見できるかもしれんが
上で述べたようなcloseのエラーチェックのスキップとか循環参照とかは機械的検出が難しい
例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体するのはソフトウェア工学的ではない

というわけでやっぱfgets()を使いつつ例外を起こさないように書くのに比べて言うほどマシでないワケ



741 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 02:03:24.24 ID:2It6fcyB.net]
君が例外安全というものについて何一つ知らない事はよく分かった
無知は罪じゃないから今から勉強し直そうね
知ってるふりしていい加減な付け焼き刃の知識を振りかざすのは恥ずかしいだけじゃなくてお客や同僚に迷惑を掛けるからね

742 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 02:48:34.85 ID:gI621CUN.net]
コードや証拠もなしに噛み合わない話の空中戦とかするくらいなら反論しなくていいから黙ってよう
どちらが正しいかはみんな分かっているのだから

743 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 06:05:15.24 ID:KuG8Rhix.net]
了解

744 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 06:18:55.46 ID:/lTW/4j8.net]
cout << sizeof ftell(nullptr);

745 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 07:21:43.01 ID:N+EpsguK.net]
自分で試す能力がなくてURL乞食しとんのか

746 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 07:46:29.59 ID:FM0S3WDg.net]
馬鹿は正当性を定義も証明もできない事柄に正当性を見出してしまう好例
例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体できないというのが真実
それが証拠にいい加減でない知識として>>721以外の何があるのか>>722は示せていない

起こることが既知なら対処を平にコードに書けば良いのに
コードに明示されておらず、検証もしきれない実行パスをボコボコ作っといて安全と言い張る神経、

747 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 07:57:14.86 ID:FM0S3WDg.net]
ていうか知能の問題かもしれん……

>どちらが正しいかはみんな分かっているのだから
衆愚の言い草
「何が」例外安全なのかきちんと定義してから出直してホスイ、

748 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 08:04:24.05 ID:N+EpsguK.net]
暴れてるやつRAIIって発想もないようだしな

749 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 08:46:39.19 ID:T9srRJav.net]
>>726
Windows環境自体がないのでは

750 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 08:51:30.49 ID:gI621CUN.net]
5chは煽ると答えが返ってくるという都市伝説があるらしい



751 名前:デフォルトの名無しさん [2021/10/19(火) 10:31:03.98 ID:L2ZQN19z.net]
バグ報告する場合は再現条件を提示する責任がある
再現できなければ「おま環」で放置される

もしかしてこのスレの住人は、立民とか共産党の支持者だったりするの?
挙証責任って概念を知らないかな
モリカケ・桜を見る会問題にのめりこむような人は技術系の職業に向いてないから転職したほうがいいね

752 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 10:37:08.97 ID:JueBMEYA.net]
最後の一文、それを断言できるのはその問題にのめりこんでる証拠のような・・・

753 名前:デフォルトの名無しさん [2021/10/19(火) 10:38:50.31 ID:L2ZQN19z.net]
お前は泥棒をしたのだから泥棒したことをお前自身が証明しろ、と言いがかりをつけ続ける取調官とか怖いだろ
それと同じことを一部の本スレ住人や立民共産信者は言ってるわけだよ

754 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 10:46:13.46 ID:ZI1Nh3C2.net]
モリカケ・桜を見る会問題にのめりこんでいない人は
突然無関係のスレでモリカケ・桜を見る会問題の話題を出さないからね
常に意識している(のめりこんでいる)から技術系のスレで政治的な話をしてしまう

755 名前:デフォルトの名無しさん [2021/10/19(火) 10:55:44.60 ID:L2ZQN19z.net]
陰謀論など思い込みの激しい人は正義感でやってるから周囲の忠告に耳を貸さない
信者同士が共鳴しあうエコーチェンバー効果

756 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 11:12:58.88 ID:ZI1Nh3C2.net]
「最近、この沼にはまって抜け出せなくなる人が多いんだよ、困ったものだね」と言いながら沼にはまっている人↑

757 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 11:22:09.22 ID:L2ZQN19z.net]
MSVCでfread()が2GB以上のファイルを扱えないことを証明してくれさえすればいいんだよ、簡単だろ?

758 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 11:31:07.37 ID:L2ZQN19z.net]
自分は雑なバグ報告しておいて、相手には執拗に問題解決を迫るキチガイとかイヤだろ?

759 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 11:40:48.93 ID:gI621CUN.net]
そもそもfreadと何をどんな環境で比較して結果どうだったなどの証拠がない件

760 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 12:09:53.53 ID:ZI1Nh3C2.net]
正直興味のない話なので関わらなきゃいいじゃんって言われるだろうけど
「相手には執拗に問題解決を迫るキチガイとかイヤだろ?」と行っている本人が「証明してくれさえすればいいんだ」と迫っているところを見る限り
やっぱり本人も沼に入っているのに気づいていないんだな、と感じる小雨が降る今日この頃



761 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 12:19:05.04 ID:L2ZQN19z.net]
いまさら何言ってんだ?
このスレは、ダニング=クルーガー効果でイキったバカをからかうためのスレだぞ

762 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 12:35:47.82 ID:N+EpsguK.net]
都合の悪いものは見えないらしいな

763 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 12:50:43.47 ID:gI621CUN.net]
スレタイトルのとおりC++に関する相談をするためのスレですよ
ID:L2ZQN19z7 は他人を煽るためだけに書き込んでるように見えるので少し風当たりが強くなってるだけです

764 名前:デフォルトの名無しさん [2021/10/19(火) 13:20:26.19 ID:L2ZQN19z.net]
マイクロソフトのような大企業がfread()の致命的な不具合を永年にわたって野放しにするはずがないという常識や判断力すらない人は、いろんな陰謀論にハマるだろうね
ご本人はそれはそれで楽しい人生なんだろうけどIT技術者としてはどうかなって話
ま、反ワクチンの医者もごくまれにいるから、陰謀論にハマる人はどんな業界にもいるんだろう

765 名前:デフォルトの名無しさん [2021/10/19(火) 13:25:05.49 ID:L2ZQN19z.net]
ビル・ゲイツがワクチンの「狂った陰謀論」を改めて否定 | Forbes JAPAN
https://forbesjapan.com/articles/detail/39513
2021/01/28 12:30

マイクロソフトの共同創業者でビリオネアのビル・ゲイツは、パンデミックを受けてSNS上で拡散した、彼に関する陰謀論の多さに「非常に驚いている」と述べ、ワクチンの普及の妨げになりかねない誤情報への懸念を示した。

ゲイツは1月27日のロイターの取材に、彼と米国のコロナ対策のトップであるアンソニー・ファウチ博士についての「狂った陰謀論」は、パンデミックに対する恐怖心とソーシャルメディアの台頭により引き起こされた可能性が高いと述べた。

パンデミックに関する最も目を引く陰謀論のいくつかは、ゲイツが「世界の人々にマイクロチップを埋め込むためにワクチンを活用しようとしている」という、根拠のない主張に基づいている。

ゲイツは、人々が本当にこれらの陰謀論を信じているのかどうかを知りたいと話した。「それは、人々の行動をどのように変えるのだろう? そして、我々はどのようにして、これを最小限に抑えるべきだったのだろう?」と、彼は問いかけた。

766 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 13:25:23.12 ID:4nkSMT7f.net]
Microsoft、不具合修正一年くらいかかったよ

767 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 13:53:44.09 ID:emsejTNf.net]
MSは直らんなあ
google よりはマシかもな

768 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 15:13:15.33 ID:gI621CUN.net]
単発IDは自演の可能性ありますね

769 名前:デフォルトの名無しさん [2021/10/19(火) 19:19:45.97 ID:GtxXqLyf.net]
2000年ごろのLinuxユーザーなら、ゲイツがワクチンにウィルス仕込んでると大騒ぎしてただろうけどな。

770 名前:デフォルトの名無しさん [2021/10/19(火) 19:24:26.03 ID:GtxXqLyf.net]
>>732
ご指摘の動作は弊社ソフトウェア製品の問題点であることが確認されました。
引き続き調査を行います。
進展状況はID2273405でご確認できます。
今後も弊社製品ご愛顧のほどよろしくお願いします。



771 名前:デフォルトの名無しさん [2021/10/19(火) 19:28:33.46 ID:GtxXqLyf.net]
>>732
「証拠はあんのか?おお〜ん?」と言ってる晋三が暴力団に見える。
証拠がなくたって傍目に明らか。
なんで5000円でスイートに泊まれるわけない。
嘘つかずにごめんなさいしたら良かっただけ。

772 名前:デフォルトの名無しさん [2021/10/19(火) 19:52:06.47 ID:L2ZQN19z.net]
>>752
5Gにつながるためにもちゃんとワクチン2回打てよ
11月になったらワクチン接種会場がさらに減るぞ

773 名前:デフォルトの名無しさん [2021/10/19(火) 19:56:28.13 ID:GtxXqLyf.net]
>>753
桜を見る会に桜井誠は呼ばれたのか?

774 名前:ハノン mailto:sage [2021/10/19(火) 20:03:42.12 ID:KyySFZDA.net]
>>731
炎上学習法とはよくいわれたものです…

775 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 20:09:58.44 ID:L2ZQN19z.net]
違います
今後の心配は園遊会やお正月などのお食事会にモェ呼ばれるのか、という点です

776 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:14:37.76 ID:0k8Pnquo.net]
>>729
RAIIだから例外安全、と言うのは短絡的
文盲に読み飛ばされたのかしらんが>>720>>721において
@ オブジェクトが個々に盲目的にリソースを解放するのが常に安全と言えるか?
A リソース解放時にエラーが生じたものを無視しておいて安全と言えるか?(あるいはコードの追加無しに無視せずに済む方法があるか?)

777 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:16:51.24 ID:0k8Pnquo.net]
B リソース解放を解放しない瑕疵があるオブジェクトの混入が無いことをどうやって保証するのか?
という3つの問題提起をしているのに対して、あいまいに取り繕って逃げたのが>>722

@〜Bに定説が無いとすれば(実際無いのだが)、例外安全というのは信奉する馬鹿の数だけ定義があるという話

778 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:19:57.61 ID:NMVwWGr0.net]
盲目じゃねえし
uncaught_excptionsも知らんようだな
って言うとにわかで調べてシッタカこくんだろうけど
今の今までおくびにも出さなかったことで
どの程度の野郎かは察しがついてる

779 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:21:14.97 ID:0k8Pnquo.net]
だいたい火災で炎上するビルの8階から人が飛び降りたとして、
例外安全とやらでできることはせいぜい人を地面に軟着陸させて生命を守るぐらいの話で、
ビルの火災を消化はしないし(それをやるのは消防署
消化後のビルを復旧はしないし(それをやるのは各種の工事屋
復旧した8界のオフィスに飛び降りた人を戻して業務を再開させることもしない(それをやるのやEmployer

普通の人はまず火災を防ぐことを第一に目指すのだが、
例外安全主義者はそんなスタイルを古いと言い、例外安全に作っとけば安全と言い張るのだ

780 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:31:45.94 ID:NMVwWGr0.net]
全然関係ねえよ
マジでビルから飛び降りて氏んだら?



781 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:33:15.63 ID:0k8Pnquo.net]
>>759
@〜Bのどれにも掠りもしない反応
(を出したことによって知能程度に察しが付く

782 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:35:17.39 ID:0k8Pnquo.net]
で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の解放が保証される、とかは関係無しに
例外安全主義者にかかってはそんなことはお構いなしである。とにかく安全と言い張る

783 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:39:44.59 ID:kO478Zp/.net]
バカの主張: バグがあるかも知れないから例外安全は「使い物にならない」

アホすぎだろ…

784 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:44:50.14 ID:0k8Pnquo.net]
>>764
>例外安全はやれるならやった方が良いのは認める(>>721
>例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体できい(>>727
というわけで文盲に言われたくは無い

特定のケースにおいて、例外でエラー処理を安全に書けてその後のリカバリーもスムーズにいきますよ、
みたいな特定方面で有効なソリューションとして例外安全を勧めるのであれば問題無いのだが、
テキストファイルをfgets()で読むという絶対的に正しい事柄への批判に無理矢理つなげようとするから
話がおかしくなる

785 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:45:51.66 ID:GCto648C.net]
>>763
x,y,zのデストラクタならcatchに飛んだ時に呼ばれることは保証されてるけど…?
例えばyのコンストラクタで例外飛んでもxは~Bar()呼んでzは呼ばないくらいコンパイラがやってくれるけど…?
そういうの忘れずやってくれるのがコンパイラだから任せようぜっていうのがRAIIなんだけど…?

まさかこんな事も知らずに例外安全がどうのと偉そうに論じてたの?嘘だろ?

786 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:47:08.92 ID:GCto648C.net]
>>765
お前はもう喋るなド初心者

787 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:47:29.23 ID:0k8Pnquo.net]
>>766
ま た 文 盲 か
>(x, y, zの解放が保証される、
と書いてあるわけだが?
しかしだからといっても普通の人はtryブロック内をチェックするだろ、という主張

788 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 07:55:59.64 ID:GCto648C.net]
>>768
初心者はおとなしく教科書の質問だけしてろよ
何かを知っているふりをするのをやめろ

789 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 08:05:08.97 ID:0k8Pnquo.net]
>>769
質問ですが例外安全の教科書として藻前は何を読んだことがあるのでぃすか?

790 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 08:13:47.58 ID:kO478Zp/.net]
> 例外安全主義者にかかってはそんなことはお構いなしである。とにかく安全と言い張る
どこの主張を言ってるのか知らんけどどう見てもお前の方が「文盲」なわけだがw



791 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 08:27:40.98 ID:DhnN+uGO.net]
>>763
RAII を使わず明示的な catch でリソース解放しているコードを見て、一般的な C++ プログラマは「危険」だと見るのでは?
その例だと「fgets()とかのコード」内の return などで fp がリークする可能性があるわけで。

792 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 08:31:29.32 ID:xpWbVnlK.net]
誰が「例外安全なら大丈夫」と言っているの?レス番は?

793 名前:デフォルトの名無しさん [2021/10/20(水) 09:12:35.95 ID:OEiI06HQ.net]
Kuso.KENTA.

794 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 09:21:20.26 ID:glY3n63N.net]
いつになっても
do {
} while(0);
でbreakをgoto代わりに使うしかないのか

795 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 09:23:08.99 ID:NMVwWGr0.net]
>>763
めまいが

796 名前:キるほどのひでえコード
やめてくれバカがうつる
[]
[ここ壊れてます]

797 名前:デフォルトの名無しさん [2021/10/20(水) 09:35:49.31 ID:OEiI06HQ.net]
>>743
観ようとしなければ何も観えない
そんな簡単なことにも気付けない

798 名前:デフォルトの名無しさん [2021/10/20(水) 09:39:48.17 ID:OEiI06HQ.net]
>>757
2GB以上じゃなくて良いけど
そこそこの大きさのファイルで
書き込んでcloseしてる途中に
電源OFFとかになったら例外どころじゃないんだが
最近のOSはちゃんとコンデンサ放電仕切るまでの間に書き込み終了するんだろうか

799 名前:デフォルトの名無しさん [2021/10/20(水) 09:44:46.84 ID:OEiI06HQ.net]
>>760
サンフランシスコ地震で高速道路崩落←直後に「日本では起こり得ない」と言われた
インドネシアの津波で街が吹っ飛ぶ←直後に「日本では起こり得ない」と言われた
チェルノブイリで原発爆発←直後に「日本では起こり得ない」と言われた
武漢でコロナ感染者急増でパニック&パンデミック←直後に「日本では起こり得ない」と言われた
いつも否定したがる人はいるしそれを信じたがるひともいる

800 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:10:43.38 ID:NMVwWGr0.net]
>>778
UPSもアレスタも知らないど素人w



801 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:15:17.23 ID:glY3n63N.net]
ファイル編集中、Ctrl+Sを押下して保存しようとした瞬間に停電になったことがある
再起動後、ファイルは存在しているのに中身は\0で埋められていたよ

802 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:16:33.48 ID:PaxGKk4c.net]
>>778
・UPSぐらい付けろよ
・障害が心配なら多重化しとけ
って話で例外安全とはレイヤーの違う話

803 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:28:28.97 ID:EqJEar1P.net]
>>770
古典だけどExceptionalC++あたりから読み始めるのがいいよ
準拠規格が古いから所々アレだけど大きな考え方を学ぶには十分だろう
感想聞かせてね

804 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:41:33.49 ID:Px+syONf.net]
いつもの

805 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 11:43:42.24 ID:BFKUlxpT.net]
786以降C++なコードもC++なURLも載せないやつは発言禁止な

806 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 12:28:18.88 ID:vkb7a42p.net]
>>763
try内のコードが例外出さない限りcloseされない

807 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 12:55:58.99 ID:Px+syONf.net]
確かにそうだ
すっかりfinallyのつもりで読んでた
やはりRAIIは正義

808 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:11:06.68 ID:NMVwWGr0.net]
いーやfreadで2G超のファイルはvsでも完全にあつかえる不都合はない
と、自信を持って断言できないゴミが
URL乞食でドヤってるのバカすぎ

809 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:28:11.75 ID:vkb7a42p.net]
C++にもfinally欲しい

810 名前:デフォルトの名無しさん [2021/10/20(水) 13:30:01.90 ID:OEiI06HQ.net]
fseek()/ftell()が32bit用でfseeki64()/ftelli64()の方を使ってないというオチか



811 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:36:27.87 ID:glY3n63N.net]
自信をもって断言したところで、モリカケ・桜を見る会と同じことになるだけだよ
アベノセイダーズは不具合を見つけてくるまで決して許さない

812 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:39:14.76 ID:glY3n63N.net]
>>789
コストラクタでラムダ式をメンバ変数に受け取りデストラクタでそのラムダ式のメンバ変数を実行するクラステンプレートを自作すれば問題解決

813 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:41:35.24 ID:NsIIvpqv.net]
fseekの引数はなぜああしたんだろうね

814 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:46:56.17 ID:glY3n63N.net]
宇宙人がいないことを証明するための労力たるや

815 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:50:04.27 ID:NMVwWGr0.net]
不都合があるという主張であろうと
不都合がないという主張であろうと
自分でコード書けないゴミは引っ込んでろ

816 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 13:53:43.95 ID:glY3n63N.net]
>>795
そのとおりだな、まずお前が引っ込め

817 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 14:13:30.21 ID:glY3n63N.net]
再帰呼び出し

我々の宇宙は高度な文明を持つ知的生命体の実験により作られたものであると推測するハーバード大学の科学者 : カラパイア
https://karapaia.com/archives/52306877.html

818 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 14:38:01.57 ID:NMVwWGr0.net]
>>796
おいURL乞食、おまえに言ってんだよ、おまえに
俺はftellで例示するコード出してんだよ
同類呼ばわりすんな穢らわしい

819 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 14:47:18.86 ID:BFKUlxpT.net]
#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は超えられてる模様

820 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 15:12:34.13 ID:glY3n63N.net]
>>799
それは、おま環にすぎないので不具合がないことの証明にはならない
不具合を見つけるのがお前の責務だ
赤木さんのように自○したくなるまで頑張って探せ



821 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 15:18:25.38 ID:BFKUlxpT.net]
今日は2つのIDで頑張ってるみたいだね

822 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 15:29:22.63 ID:NMVwWGr0.net]
プログラム技術板の正規メンバに
クソ以外の乞食が何か寝言ぬかしとんな

823 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 15:34:29.03 ID:glY3n63N.net]
お前らの家の冷蔵庫にエルビス・プレスリーがいないからといって、この世にエルビス・プレスリーがいないことの証明にはならないんだよ
血を吐くまで探せ

824 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 15:55:06.91 ID:4r95dvH8.net]
不具合あるのを証明したほうがてっとりばやい

825 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 16:02:32.88 ID:glY3n63N.net]
あぁ?わかって言ってんのか?
泥棒の証拠を泥棒に探させるのがアベガー品質だぞ

826 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 16:09:49.79 ID:Px+syONf.net]
元々>>637がC++でもfgetsを使う俺は天才などとのたもうて
>>687がFILE*を使うなら例外安全をどう保証するのという話だったのが、
当の>>637>>691でfread/fgets自体が例外を投げる可能性(?)という謎の問題を考え始め
>>710が根拠不明の2GB制限の話を持ち出し

問題があると考えるひとは存在しない2個の問題を同時に考えて混乱し
まあまあ分かってる人はRAIIすればいいじゃん(ってかfstreamでいいじゃん)で話が終わっている

まとめるとこんなところか?

827 名前:デフォルトの名無しさん [2021/10/20(水) 16:17:28.71 ID:glY3n63N.net]
挙証責任をガン無視できる文部科学省元事務次官前川喜平こそ最強
座右の銘は面従腹背、ライフワークは貧困調査

828 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 16:39:46.06 ID:NMVwWGr0.net]
キチガイ極左は内ゲバで共食いしとれ

829 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 00:40:30.45 ID:ObBh/r ]
[ここ壊れてます]

830 名前:k9.net mailto: >>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を返していた
[]
[ここ壊れてます]



831 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 00:51:53.61 ID:l0SlZ35R.net]
話の肝は「私が間違ってました。ごめんなさい」と素直に言えるかどうかなわけで
小室文書みたいな屁理屈の羅列はいらねンだわ

832 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 01:06:38.58 ID:5bux1k1I.net]
>>807
NHK は メード イン ジャパン とか オーダー メード とか表記するのに
メイド 喫茶は なぜ メイド 表記なのですか?

833 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 01:19:29.04 ID:ObBh/rk9.net]
ちなみに>>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
$

834 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 03:46:14.13 ID:Y6x8PTxQ.net]
>>811
前者がmadeで後者がmaidだからじゃね?

835 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 07:45:14.90 ID:5PpYpVBN.net]
以前はメードだったと思うけどね

836 名前:デフォルトの名無しさん [2021/10/21(木) 11:19:37.65 ID:l0SlZ35R.net]
ババ抜きはOld maidの日本語訳だよ
セクシズムやエイジズムはポリコレの立場から見てどうだろうね

837 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 12:39:37.82 ID:u1ltZUWw.net]
regexで\dを使いたい場合はどうやるん?

838 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 14:10:28.52 ID:ObBh/rk9.net]
https://cpprefjp.github.io/reference/regex/basic_regex.html

839 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 17:33:55.95 ID:MfhbDLcG.net]
>>812
その比較でなんで fread だけ遅いんだ?と思ってコード見たら fread じゃなくて fgets になってた。
あと read_cpp_standard() の if (std::cin.fail()) もたぶん f.fail() の間違い。

840 名前:デフォルトの名無しさん [2021/10/21(木) 18:24:19.20 ID:/1ln80gU.net]
>>815
フェミが言葉狩りのネタにしないのは何故



841 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 18:42:48.64 ID:7ERuyWg6.net]
言葉狩りなんてないから

842 名前:デフォルトの名無しさん [2021/10/21(木) 18:56:39.47 ID:ObBh/rk9.net]
>>818
thx
>>812のコードは脳内破棄してくれ
指摘された部分を修正した
https://ideone.com/DoI3ww

同環境での測定結果が↓
214
213
214

freadだとバッファリングされるからその分遅いのかと勝手に思ってたらそんなところから間違ってたとはすまんw

843 名前:デフォルトの名無しさん [2021/10/22(金) 00:41:05.61 ID:bIdSm1HR.net]
BB抜きが有ってGG抜きが無いのは差別

844 名前:デフォルトの名無しさん [2021/10/22(金) 00:43:55.21 ID:bIdSm1HR.net]
>>821
fread最強でFA

845 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 01:17:58.50 ID:JLUkeFzw.net]
freadのバイナリな
DMA効くのは
テキストはゴミ

846 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 02:55:23.69 ID:ugOmuUc2.net]
>>822
ジジ抜きもあるよ。
ジジ抜きはジョーカーを使わない。
適当な札を一枚抜いておいて組にならない札を最後まで持ってた奴が負け。
どれが負け札なのか最後までわからないというのがゲームの面白い部分。

ちなみに日本語でジジ抜きと呼ばれているゲームこそが Old maid (行き遅れ、お局様) の本来のルールで、
ペア (結婚相手) がないことを Old maid に喩えた命名になっている。

847 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 05:43:15.83 ID:I4IH0MDY.net]
C++20ちょっと書き始めたらvscodeのインテリセンスが何でもないところにエラーの波線出しまくってくる

848 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 07:07:31.23 ID:viI1I/mh.net]
DMAか、懐かしい

849 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 12:50:15.03 ID:xpSH/+fs.net]
>>826
どの環境でそうなる?

850 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 13:37:10.17 ID:I4IH0MDY.net]
>>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でも言えるけど



851 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 23:23:13.68 ID:Q/4+pM2R.net]
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>>)
のような不定型配列を複数引数に取る関数を作りたいです。

852 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 23:45:34.05 ID:vgFDGRgE.net]
std::variantつかうとか

853 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 01:05:44.90 ID:UQ/XjfNb.net]
>>830
出来るといえば出来るんだが、動的型っぽいことを C++ でやろうとすると煩雑だよ。
std::any は何でも格納できるが使うときには結局は元の型として取りださないといけない。
格納することが出来たとして、その後にどういう風に使うのかによってデザインの仕方がかわってくる。

854 名前:ハノン mailto:sage [2021/10/23(土) 01:33:33.73 ID:0KDU0Kot.net]
>>830
C++17以降、へえ、こんなこともできるんだ… https://cpprefjp.github.io/reference/variant/variant.html
https://ideone.com/G8IPFR
>>831
ありがとうございます!

855 名前:ハノン mailto:sage [2021/10/23(土) 01:34:50.09 ID:0KDU0Kot.net]
>>832
うん、実用に供するまでには結構大変そう、使い道がわからん…

856 名前:はちみつ餃子 mailto:sage [2021/10/23(土) 01:57:47.58 ID:UQ/XjfNb.net]
>>834
クラスの設計段階で抽象クラスとの継承関係を作っておくだとかいった方法で多相にするのが
旧来からの方法で、それができるならそのほうがまともなものになると思うんだが、
そうは言ってもユーザーからは弄れない既存のクラスをどうしても使いたいということも無くはない。

根本的な部分をいじれないときに場当たり的にどうにかするよりは std::any や std::variant を使ったら
少しはマシかもねという程度の話で、あまり積極的に使うようなものではないというのが私の感触だな。

857 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 08:10:22.62 ID:LycCK1PV.net]
void*よりはちょっとマシって程度の感覚だな

858 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 10:04:52.59 ID:rMqegMI3.net]
>>832
その後の使い方は、基本的には
全要素をany_castでstringにして使うつもりです。
不定型可変長のデータを受け取ってcsvファイル出力に使いたい感じです。

859 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 10:05:50.17 ID:bwy1yWHL.net]
void*「むかしはあんなに愛してくれたのに…」

860 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 11:08:12.01 ID:FGy8rv7m.net]
>>830
any使うんだったら、
vector<vector<any>> hoge;
じゃなくて
vector<any> hoge;
じゃない?



861 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 11:40:12.00 ID:KcnUiVki.net]
>>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が継承(実装)した方がいいと思うってこと?

862 名前:はちみつ餃子 mailto:sage [2021/10/23(土) 13:07:50.50 ID:UQ/XjfNb.net]
>>840
そう。 クラスごとに違う挙動が必要ならその違いはクラスの中に隠蔽されているべきで、
クラスを使う側で分岐するのはなんかちょっとあれだなという感じ。

型を調べて分岐するようなコードが嫌だから動的な型を調べる機能を意図的に入れなかった話は D&E にも書かれてる。
(最終的には typeid が導入されてしまったけど……)
ただそれは「型を追加したくなったら分岐も増やすのはめんどいしミスしそう」みたいな話なので、
十分に賢いユーティリティが標準で用意されている今ならそれほど強い動機でもないんだけどね。

863 名前:デフォルトの名無しさん [2021/10/23(土) 13:12:23.67 ID:quaWTEll.net]
C++はパラメトリック多相が無いからこういうのは面倒だよね。
とりあえずはstd::vector<std::function<std::string()>>に[v](){ return std::to_string(v); };
あたりを入れとくのが簡単かね。

conceptを「その制約を持つクラスの総称クラス」としてshared_ptrあたりで指定できるようになると便利なんだけどなぁ。
concept_shared_ptrとか用意してくれんかね。

864 名前:はちみつ餃子 mailto:sage [2021/10/23(土) 13:16:46.64 ID:UQ/XjfNb.net]
>>837
any_cast での取り出しは「元の型」でなければならず、
string に変換可能な型であっても any_cast<string> は出来ない。
(やったら例外が飛ぶ)

最終的に文字列になると決めているなら文字列にしてから格納したほうがすっきりするんじゃないの。

865 名前:デフォルトの名無しさん mailto:sage [2021/10/23(土) 14:23:02.68 ID:KcnUiVki.net]
>>841
まあそうだよね。ありがとう。

866 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 08:17:03.78 ID:mo2+vXTQ.net]
>>771-772
以下のような場合についてBarクラスがRAIIであるというだけでどう例外安全にできるのかお考えをお聞かせ願えますか
void foo() {
 {  // 何かのコードブロック (try { } catch { } のtry{ } とかでも良い
   Bar x, y, z;
    (例外を生じる可能性があるコード)
   アプリケーション固有の別スレッドXにイベントなりシグナルを送る
 }
}

>>723
上に書いたようなケースを踏まえてっ例外安全に言及している>>720>>721に対して
理解しいないまま捨て台詞を残して逃走した>>722とか、

867 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 08:20:03.55 ID:mo2+vXTQ.net]
>>772
コードブロック内のreturnがあるかもしれないんならチェックすれば良いやん?
>>763は普通の人ならチェックするでしょ、という主張

ところが>>722のような例外安全主義者ときては、RAII = 例外安全、で脳がショートしているのや
多分周りも能力に忖度して大した課題を与えていないんだと思う

868 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 08:40:20.31 ID:i4dOTOfz.net]
上では例外安全にするとかしないとか言っていたような気がしたが少し主張が変わったのかな。

- 例外安全を求めるのは当然
- RAIIを使えば比較的例外安全を保証しやすい
- だからといってRAIIを使えば自動的に例外安全になるわけではない

結論としてはこんな感じだと思うが。

869 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 08:41:27.07 ID:7jz7Y9vl.net]
チェックして例外出さないと解放されないコード書いたのか…

870 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 09:13:23.68 ID:1SVJ9Wvp.net]
そりゃ例外安全もRAIIも魔法じゃないんだから使えば即安全になるというわけじゃないわな
「ちゃんと使えば」をすっ飛ばして>>845みたいなことを言い出すのも一種の思考停止だろうと思うわ



871 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 09:51:02.52 ID:v4numFpL.net]
>>845
Barのデストラクタの責務は自分が確保したリソースをリークしないことだけだ
オブジェクトの外側でやってるスレッド間通信のことなんかBarは知らんし別に手当するだけの話

逆に聞くがRAIIを嫌がってBar* x = new Bar;とかにしたらなんか事態改善すんの?スレッド間通信を簡潔に書くための役に立つの?

872 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 10:24:44.80 ID:P2kmr3bK.net]
そもそもRAIIが例外安全のためっていうイメージ全くないんだけど
リソースのお片付け(≒メモリリーク防止)が主目的ちゃうん?

873 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 10:36:38.75 ID:i4dOTOfz.net]
例外が発生するとリソースを片付け損ねる場合があるってのが例外安全を欠く一番よくあるケースだと思うけど。
主目的がどうとかは別として。

874 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 10:45:51.44 ID:NLtlOSxj.net]
>>845
例外を生じた場合でもXとなんらかの通信を行うべきなら
thread_connectionみたいなクラスを作ってデストラクタに整合性を保つためコードを書くのがいいかな
「アプリケーション固有の〜を送る」の部分にはそのオブジェクトのメソッド呼び出しにしておく
例外発生時にはデストラクタによってXスレッドに異常を通知してXスレッドが持つ状態の整合性を確保してもらう

Xに通知するのが単なる終了通知なら(成否を区別して処理しなくていいなら)全部デストラクタでいいかもね

875 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 10:47:45.55 ID:KyFc3YJo.net]
結局コードがないのでまた空中戦になってますね

876 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 11:38:44.49 ID:IQSwOnqn.net]
例外でデストラクタ呼ばないケースなんてあるんですか?
プログラム自体が止まるのは別として

877 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 12:07:45.68 ID:KyFc3YJo.net]
リマインダー>>731

878 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 14:38:53.43 ID:KyFc3YJo.net]
これ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

879 名前:ハノン mailto:sage [2021/10/24(日) 15:13:35.43 ID:rOnHPdOM.net]
>>838
「「最初から void * な実体」は作らない」「void (*)(void *, ...) くらいまでがせいぜいだ」というように努めていた私は愛し方が足りなかったのでしょうか?
最近の愛し方:https://mevius.5ch.net/test/read.cgi/tech/1624028577/305

880 名前:はちみつ餃子 mailto:sage [2021/10/24(日) 18:37:46.86 ID:SzIAMYLD.net]
>>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;
}



881 名前:デフォルトの名無しさん mailto:sage [2021/10/24(日) 19:35:48.44 ID:KyFc3YJo.net]
>>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したときだけなぜ判定失敗してくれるのかもう少し考えてみます。
ありがとうございました。

882 名前:はちみつ餃子 mailto:sage [2021/10/25(月) 00:43:36.43 ID:dRHq7DJG.net]
>>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 を削るとエラーになるんだよな。
なんだかよくわかんないね。

883 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 02:18:03.94 ID:LmZJdmU+.net]
>>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

884 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 02:19:56.83 ID:LmZJdmU+.net]
最後のコードは右上の設定ボタンから -std=c++17 を追加することで実行できます。

885 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 13:57:01.70 ID:p1HT8A4i.net]
iostreamのシフト演算子オーバーロードは文句を言われてるがrangesのoperator|のオーバーロードはどうなんですかね

886 名前:はちみつ餃子 mailto:sage [2021/10/25(月) 14:01:06.87 ID:dRHq7DJG.net]
感覚的にはまあ順当だろうと思う。
日付やパスで / を使うのに比べればよっぽど……。

887 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 15:38:37.13 ID:x4U5y7kU.net]
組み込みの意味を持たないオーバーロード専用演算子があれば良かったのにな
用意しておかなかったのはC++の初期デザインの失敗だったと思う

888 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 16:09:42.75 ID:SLeimCOK.net]
意味を持たない演算子が意図せず呼ばれてしまうくらいならコンパイルエラーになったほうがマシでは

889 名前:はちみつ餃子 mailto:sage [2021/10/25(月) 17:28:55.78 ID:dRHq7DJG.net]
ところで Haskell で一定の記号の組み合わせは何でも新しい演算子として定義できる仕組みがある。
!#$%&*+./<=>? あたりとその他 Unicode 内いくらかも含めた組み合わせで演算子を作っていい。
優先順位も決められるし左結合か右結合かも決められる。
事実上無制限に違う字面の演算子を作れるんだよ。
<?+> とか #-. とか <<-~ みたいな演算子が実際に使われてるわけ。
こういう極端なのはさすがにあまりうらやましくはないよな……。

>>866
かといって有限の演算子をある程度に多く用意したところで

890 名前:オーバーロードを許すなら
どこかで全然違う意味で使われることもあるのは避けようがないし、
C++ くらいにスッパリと諦めるのもそれはそれで思い切りが良くて良いと思う。
[]
[ここ壊れてます]



891 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 17:51:03.08 ID:s1VnbLSn.net]
演算子ってのはwellknownだからこそ意味があると思うんだけどな
演算子のオーバーロードもその“意味”から大きく逸脱しないことを求めていたと思うし
意味を持たないオーバーロード専用演算子ってのは
プログラマーによって意味が真逆になりかねないから危険だと思う
そんなことするぐらいなら普通に名前を付けて関数定義したほうがマシに思える

892 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 17:56:20.95 ID:5fKOgArh.net]
そこら中訳わかんない記号だらけのソースとか悪夢でしかないなw

893 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 18:04:59.44 ID:LmZJdmU+.net]
>>857の原因判明しました。
同一の問題がstackoverflowで解決されていたのでリンクだけ貼っておきます。
https://stackoverflow.com/questions/52845621/cant-stream-stdendl-with-overloaded-operator-for-stdvariant

上記に従った対策コードは以下のとおりです。
https://godbolt.org/z/8e9o3MnaG

894 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 20:01:58.87 ID:VZsrHh6g.net]
>>866
リザーブの演算子持っとけって言いたいんだろうけどこう言う奴はいくつ持ってても足りねーとか言うからw

895 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 21:34:55.28 ID:3IW01+t9.net]
演算子オーバーロードって自分で書くにはいいけど他人のコードを読むのが地獄だな。

896 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 21:35:04.23 ID:EqTxifVC.net]
while (fread(&x, sizeof(double), 1, fin) > 0) {
fprintf(fout, "%5.4f\n", x);
}

こんな風に書くとコベリティ君がfreadは読み込んだバイト数を返すが使っていませんみたいなこと言い出すんだが
は?使ってますけど?みたいな気持ちしかないんだけど
何を求められてるんだろうか。

897 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 06:12:19.30 ID:lDQyydUS.net]
>>874
そんなのシノプシスに聞けよ…

898 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 06:48:54.44 ID:ch+2e+/f.net]
>>870
昔のAPLとかかw

899 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 08:08:42.05 ID:a/qQal0X.net]
演算子に限らず、ある関数を特定の名前空間の内部だけ使えるように限定できたっけ?
「あるスコープだけこういう使い方」ならまだ混乱も少ないかね。

900 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 08:14:06.41 ID:FOkaXEb/.net]
ん? それこそが名前空間の可視性制御だろ



901 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 08:14:48.16 ID:X4knYEql.net]
関数内で構造体を定義し、その中でstatic関数を定義する

902 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 08:15:27.77 ID:X4knYEql.net]
あ、違った
class内のprivate関数でいいんじゃね

903 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 08:27:02.14 ID:cqUp+YH+.net]
>>878
名前空間の外にお漏らししないようにできたっけ?
同じ名前空間にクラス定義しなければADLも気にしないでいいのかしらん。

904 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 09:22:33.47 ID:tIXOLnPL.net]
>>881
この手の話?
cpp.aquariuscode.com/adl-firewall

905 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 10:05:37.17 ID:I5hwU/3x.net]
>>874
fprintfはええんか?

906 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 10:21:21.31 ID:g/XkL0k7.net]
niebloidの出番じゃないの?演算子オーバーロードには使えないが

907 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 12:31:52.75 ID:E+rw0Wy/.net]
>>882
そうそう、そんな感じ。

実際には演算子を閉じ込めたい名前空間の中でクラスを定義しなければADLは影響しないけど、もし定義するとしてもこの技法で回避できそうだね。

908 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 12:54:35.40 ID:FaeDWsHu.net]
今日もまた単発IDの曖昧発言onlyですね

909 名前:ハノン mailto:sage [2021/10/31(日) 10:43:09.43 ID:hT9enBIH.net]
テステス

910 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 17:04:38.20 ID:uZUsIwlp.net]
std::function を引数にとる関数を作ってるんだが、参照で渡すのとコピーで渡すのでどのように動作が変わるかわからない
参照で渡して良いですか



911 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 17:28:34.89 ID:2TKPTRzu.net]
std::funcて中身は関数ポインタ―でしょ
コピーで済むものを参照で渡す必要はそもそもないんじゃないの
受け取り先で書き換えて返すなら別だけど

912 名前:はちみつ餃子 mailto:sage [2021/11/01(月) 17:29:06.34 ID:w5vOXkrp.net]
>>888
「引数にとる」というのは実引数の型も std::function 型という意味?

913 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 17:41:35.71 ID:ja4QDiEt.net]
保存目的なら値渡しのほうがよいらしい
https://stackoverflow.com/questions/18365532/should-i-pass-an-stdfunction-by-const-reference

914 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 17:42:17.47 ID:P2kjdACs.net]
コピーだろー

915 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 17:54:17.61 ID:uZUsIwlp.net]
>>890
関数を想定しています

916 名前:はちみつ餃子 mailto:sage [2021/11/01(月) 17:58:12.22 ID:w5vOXkrp.net]
>>893
仮引数の側を std::function の参照にしたところで、実引数の側が std::function ではないときは
変換して一時オブジェクトを作ってからその参照をとる形になるんだよ。
これは std::function に限らない一般原則。
どちらにしても新しいオブジェクトを構築するので参照にする意味がない。

917 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 18:35:36.43 ID:XqzqlHR8.net]
クラスのメンバーにstd::functionをいくつか用意しておいて、
条件によりどれかのstd::functionを引数に取るprivateなメンバ関数とかなら参照にする意味はあるかもしれないw

918 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 19:28:38.40 ID:Qg2QcgLf.net]
この流れで質問をば。

std::functionだと単体のR opetator()(Arg...)しか指定できないけど、複数のメソッドを指定できるように拡張するにはどうしたらいいかしらん?

継承じゃなくてtype erasure を使ったgeneral smart pointerとでもいうようなやつが欲しいんだけど、どこかに実装ないかなぁ。

919 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 19:49:46.26 ID:Iw+wFADq.net]
anyの使いどころ?

920 名前:896 mailto:sage [2021/11/01(月) 20:35:42.39 ID:0sJcc+2w.net]
anyだとメソッドを呼び出せないから機能が足りないですな。
メソッド呼び出しできるインターフェイス付きanyみたいな感じ。
用途は「指定したメソッドがあれば継承関係無しでブチ込める親クラスみたいなanyみたいなshared_ptr」だけど。



921 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 20:39:54.69 ID:ja4QDiEt.net]
理解できてないけど普通のテンプレート引数を持つ関数じゃいかんの?

922 名前:896 mailto:sage [2021/11/01(月) 21:35:17.71 ID:0sJcc+2w.net]
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とは違ってそのまま共通メソッドを呼び出せるようにする、
というのが狙いね。

923 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 22:33:44.83 ID:JtJuMIHt.net]
>>900 https://www.google.com/search?q=Boost.TypeErasure

924 名前:896 mailto:sage [2021/11/02(火) 00:28:12.27 ID:F29rpsLU.net]
>901
ありがとう。こういうのもあるのね

……でも BOOST_TYPE_ERASURE_MEMBER を使ったコンセプトがWandboxで上手く動かないなぁ。
もうちょっと試してみるか。

925 名前:デフォルトの名無しさん mailto:sega [2021/11/02(火) 10:51:55.89 ID:7a5iqwfV.net]
std::thread で作られるスレッドって
スタックサイズはデフォルトいくつなん?
変更とかできるん?

926 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 10:59:21.25 ID:oKrr57AH.net]
>>903
スタックなんて概念がないのに制御できるわけがない

927 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 11:48:47.80 ID:LR6fq+wY.net]
linuxならulimit -sかpthread_attr_setstacksizeで設定できる
ただ確保されるのは仮想メモリなので現実的にはその設定あんまり使い所がない
そしてC++とか関係ない

928 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 13:09:21.89 ID:TehqQXLJ.net]
stdよりposixのほうが洗練されてるよな

929 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 17:28:47.39 ID:LR6fq+wY.net]
何いってんの?この人

930 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 19:04:22.54 ID:TehqQXLJ.net]
意味わかんなくてpthread使ってんなら相当頭悪い



931 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 19:13:49.36 ID:U4IKz2Wy.net]
むだに喧嘩すんなよ

932 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 19:28:12.57 ID:LR6fq+wY.net]
比較対象がおかしいんだからしょうがなくね?w

933 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 00:18:59.36 ID:2vTbLoUN.net]
基底クラスに定数持たせるけど値は継承先で決めたい。
例)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) {}
};

934 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 00:22:58.93 ID:O1PLiy99.net]
別に普通だと思うけどどの辺が見づらいと思うんだ?

935 名前:はちみつ餃子 mailto:sage [2021/11/05(金) 01:26:19.60 ID:8QrXrM3i.net]
値が const であるだけでなく static であって欲しいという意図なんじゃないかと想像する。

936 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 01:29:07.53 ID:zGuhJhpK.net]
クラステンプレート化すればいいじゃない
template<double W, double H, double WD>

937 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 01:41:20.30 ID:gd3zcTPm.net]
doubleってテンプレート引数OKになったの?

938 名前:はちみつ餃子 mailto:sage [2021/11/05(金) 01:48:57.72 ID:8QrXrM3i.net]
>>915
C++20 で非型テンプレート引数の大幅な緩和があった。

939 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 02:25:46.30 ID:Xs8oV2Az.net]
C++20では普通に使えるかもだけど、引数に名前を付ける風のトリックがあるらしい
https://www.fluentcpp.com/2018/12/14/named-arguments-cpp/

940 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 05:55:16.82 ID:caWVwyr0.net]
>>911
virtual double weight() const = 0;
じゃあかんの?



941 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 06:25:31.61 ID:8h2e+y9J.net]
>>912
引数が数値ばかりで10個とかあると確かに何を指定してるのかぱっと見わかんなくなりそう
C++なら>>918に一票だけど参照する時に ( ) が要るからこう言うケースだとC#のプロパティが欲しくなる

942 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 07:38:38.22 ID:gd3zcTPm.net]
C++20で指示付き初期化が出来るようなので、もしC++20が使えるなら定数を構造体にまとめたらいいかも

https://cpprefjp.github.io/lang/cpp20/designated_initialization.html

943 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 08:22:45.14 ID:OHT8JXtH.net]
>>911
Builderパターンとか?
面倒だったらDirectorクラスは省略しても問題なさそう。
類型的な車種ごとにBuilderを派生させてデフォルト値を決めといてもいいかと。

944 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 12:38:49.71 ID:gSSLx8YQ.net]
>>919
参照するときに()ていうのは
a=car.weight(); ていうこと?
a=car.weight; と表記したいならoperator=をオーバーロードすればいいかと

945 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 13:46 ]
[ここ壊れてます]

946 名前::37.13 ID:Xs8oV2Az.net mailto: >>920
C++20で使えるのそれそれ。gccでは元々使えるけど...
[]
[ここ壊れてます]

947 名前:はちみつ餃子 mailto:sage [2021/11/05(金) 13:57:04.43 ID:8QrXrM3i.net]
>>923
C (C99 以降) には有るからついでに C++ でも使えるようにするのは gcc 的にはたいした手間でもなかったんだろうと思う。

948 名前:はちみつ餃子 mailto:sage [2021/11/05(金) 14:01:00.76 ID:8QrXrM3i.net]
ところで C の designated initializer では配列要素を指示することも出来るんだけど、 C++20 にはこれは入らなかったんだね。
↓ こういうの。

const char *foo[5] = {
[2]="bar"
};

949 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 14:04:47.27 ID:XqgFcDRs.net]
c++17以前でも引数を構造体にまとめれば{}で区切って記述できるようになるから多少マシにはなるよね
IntelliSenseが効きにくくなるのが欠点だけど

950 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 14:10:59.42 ID:TiWO+rcp.net]
>>922
君は何を言っているんだい?



951 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 14:27:51.72 ID:7LuUsMxr.net]
そのCの記述素晴らしいよね
C++的でないのはわかるがどうせ初期化時でしか使わんのだしとっとと入れるべきだった

952 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 16:10:31.37 ID:gd3zcTPm.net]
>>925 ラムダ式のキャプチャと競合するためと書いてるね

953 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 16:47:32.00 ID:qipzvPRM.net]
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;
}
このコードをコメント側に変更してコンパイルするとこけるんだけど、なんで?

954 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 17:51:19.26 ID:ISiN+sDp.net]
>>928
aggregate限定だね

955 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 17:56:01.13 ID:Mdbpk+F7.net]
>>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.

これですかね?
カスタムアロケータ自分で定義したことないのでじゃあどうすればいいかは分かりませんが……

956 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 18:53:11.25 ID:Qwz9shRh.net]
rebind_allocが悪さしてたりして

957 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 19:23:12.01 ID:A2QjBZsT.net]
>>930
SizeLimitedAllocatorの定義にこれ追加すればいいよ
template<typename U>
struct rebind {using other = SizeLimitedAllocator<U,C>;};

958 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 00:05:22.17 ID:dWDs4ee0.net]
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のように

959 名前:
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/alloc_traits.h#L51-L57
この下の定義に当てはまるrebind<U>::otherを定義しておく必要があるようです。

定数値でなく型がテンプレート引数に追加された場合は、otherの定義は必要ありませんでした。
[]
[ここ壊れてます]

960 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 17:04:45.91 ID:9a0GsOuO.net]
グーグルテストのASSERTの片辺に期待値をマジックナンバーじゃなくマクロ定数で指定すると赤線引いて来やがるんだけどVSだけ?
ビルドは通るしテストもできるから全く問題ないんだけどうぜー



961 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 20:17:21.11 ID:MFJzciMu.net]
warningの種類ごとにon/offしたくなる

962 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 00:05:50.61 ID:QjSth2/F.net]
大体のコンパイラはそういう#pragma持ってるだろ
MSVCなら#pragma warning
GCCなら#pragma GCC diagnostic

963 名前:デフォルトの名無しさん mailto:sega [2021/11/12(金) 12:50:12.26 ID:DicJ24/v.net]
改行コードとかタブコードとかが含まれた文字列を
\nとか\tとかにエスケープしてくれる関数ってある?

964 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 12:53:25.82 ID:/M/iq88E.net]
速度気にしないなら正規表現で

965 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 13:28:00.04 ID:INEjO2I3.net]
quote?

966 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 14:16:51.83 ID:IjXGHyKg.net]
std::replaceは?
sjisだとまずいかも

967 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 20:51:39.15 ID:4Xte/kSq.net]
文字コード周りはカオスすぎて標準も手に負えず匙投げたからライブラリ使った方がいいよ

968 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 23:22:09.10 ID:qmhW9zZv.net]
>>939
C/C++の場合、1文字単位での文字列処理が得意なので、自作するのも簡単。
0x09 や 0x0a は、SJISやUtf8などの多バイト文字の中には含まれて無いから、
なおさら。
例えば、std::stringでも、新しい文字列変数dstを作って、srcの文字列
から1バイト単位で読み取って、dstに1文字ずつ末尾追加していけばいい。

969 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 23:28:15.13 ID:qmhW9zZv.net]
>>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++;
}

970 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 23:33:56.40 ID:qmhW9zZv.net]
>>945
[補足]
このプログラムは、1バイトずつ読み取っているが、文字符合は、このままでも、
無修正で ASCIIだけでなく、SJISやUTF8やEUCにも対応している。
後者のような符合では、例えば、SJISの"あ"の文字だと、1文字単位ではなく、
1バイトずつ処理され、2回ループが回るが、問題ない。
UTF8だと3回ループされる。
つまり、このプログラムでは、SJISの1文字は、2文字のように
UTF8の"あ"の文字は、3文字のように処理される。
しかし、それでも結果的には問題ない。
なぜなら、0x0aや0x09は、多バイト文字の中には含まれてないから。

ただし、SJISの場合、\ の文字コードが含まれているので注意が必要ではあるが、
今回は問題ない。



971 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 23:39:04.51 ID:qmhW9zZv.net]
>>946
[補足2]
char は、C言語が登場した時には、「文字」の意味であったが、
今は少なくとも C言語では文字の意味はほぼなく、1バイト(8BIT)の意味である。
そして、C言語でcharが1バイト(8BIT)で無い処理系は、主流ではないので無視
してよい。
Javaなどでは、charが 必ず16BITであるのとは対照的である。
ただし、Javaもサロゲートペアの文字に対しては、charは文字の一部であって
本当の1文字には対応していない。
※結局、どの言語も、1文字を固定長で扱い続けることは避けている。

972 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 02:30:33.64 ID:sxA0duhG.net]
メモリ確保が多発しそうなプログラムやね

973 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 06:30:48.47 ID:x1CN7sQN.net]
老害が一生懸命考えたんだろw
メモリリークしまくられるよりマシ

974 名前:デフォルトの名無しさん [2021/11/13(土) 07:45:14.90 ID:xg91cK1y.net]
CStringにせよbasic_stringにせよメモリ確保の多発なんて心配しなくていいよ
JavaのStringじゃないんだから

975 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 08:44:09.90 ID:sxA0duhG.net]
こういう時reserveしてなくても問題ないの?
最大容量わかってるやん。

976 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 09:34:35.76 ID:GqP7nzeW.net]
メモリ2倍取るのと再配置とどっちが無駄かはそれこそ環境と目的次第だろ

977 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 11:06:02.43 ID:wYZH/w0f.net]
>>945
CStringA
もしくは _T("\\t")他

978 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 11:44:37.82 ID:wZp5djKL.net]
vectorもそうだけど、倍々にメモリを再配置していくアルゴリズムがそこそこ効率的なので、
たいていの場合はreserveしようがしまいが有意な差は出ないよね

979 名前:デフォルトの名無しさん [2021/11/13(土) 12:34:40.00 ID:GR8tTV2x.net]
>>943
ほんそれ
std::codecvt_utf8_utf16とか黒歴史でしかない

980 名前:デフォルトの名無しさん [2021/11/13(土) 12:36:34.59 ID:GR8tTV2x.net]
>>944-945
良い子は真似をしないように



981 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 12:49:12.18 ID:jQtDYU1M.net]
プログラミングとしてはiso2020使ってた頃と大して変わらんよね
低レベルで吸収してくれんとやってられん

982 名前:デフォルトの名無しさん [2021/11/13(土) 13:24:23.81 ID:xg91cK1y.net]
ファイル読み取りもシステムコール側が独自にバッファリングしていることが多いから
プログラマ側ががんばってバッファリングしても二度手間だったりする

983 名前:ハノン mailto:sage [2021/11/13(土) 15:53:45.28 ID:DyUYxUU0.net]
>>955
utf32<->utf8
utf32<->utf16
で十分だと思っていますが

というか、 utf16 自体が黒歴史…

984 名前:ハノン mailto:sage [2021/11/13(土) 15:54:13.83 ID:DyUYxUU0.net]
>>958
stdio.h をディするのはそこまでだ

985 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 17:16:26.07 ID:kpA91CRo.net]
文字コードなんて事実上iconvが標準だろ
せいぜいicuくらい
他は一部のプラットフォーム固有の関数くらい
制御コードはISO2022でもなければ使わんし、いうてwhite spaceの類は使われてないから気にすんな
真面目にやると文字の境界見つけんのがだるいし、合成文字の扱いも微妙、異常系の仕様も要件次第になるし、Unicodeのバージョンも無限に上がりそうだけどなw
ってわけでC++とか関係ない話だからどうでもいいよ

986 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 18:02:09.89 ID:vJfZgOKN.net]
C++ なら strstream やろ

987 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 18:03:36.59 ID:vJfZgOKN.net]
>>959
utf32<->utf8
utf32<->utf16

どちらも std:: のは黒歴史

988 名前:ハノン mailto:sage [2021/11/13(土) 18:39:04.73 ID:DyUYxUU0.net]
>>963
そうなんですか…
なぜなんですか?

989 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 19:29:59.64 ID:vJfZgOKN.net]
>>964
知ってるくせに
https://cpprefjp.github.io/reference/codecvt.html
https://cpprefjp.github.io/reference/codecvt/codecvt_utf8.html
https://cpprefjp.github.io/reference/codecvt/codecvt_mode.html
https://cpprefjp.github.io/reference/locale/wstring_convert.html

990 名前:デフォルトの名無しさん [2021/11/13(土) 21:14:20.03 ID:aIrFEHKz.net]
自分はHTML5の仕様に従って変換してます!



991 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 08:24:14.02 ID:gLhea8X6.net]
>>959
結合文字列があるから、結局コードポイントに必ず1文字が対応しているとは限らないし、
何使ってもUnicodeは闇じゃないか。
まあ、UTF32使えばコードポイントがぶっ壊れることは避けられるけれども。

992 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 09:14:46.42 ID:ybz8bu8o.net]
この場合同じコードポイントでの変換なわけだし一文字がどうとか関係ないが。

993 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 10:38:12.94 ID:G9ajtZXw.net]
>>948
Perl/Ruby/JSなんかで正規表現を使って置換する場合でも、
同じようなアルゴリズムを使ってるはずだから、これが
特に非効率なわけではないし、代わりになるアルゴリズムで
これよりトータルで効率の良いものも恐らく存在しない。

1.例えば、0x0aと0x09の出現回数を最初に数えれば、必要な
 dstのバイト数を見積もることは可能だが、その場合は、
 二回もパースが必要になるし、プログラムも分かりにくくなる。
 二回パースすることによる速度低下も有る。

2.dstのサイズはsrcのサイズの2倍を越えないので、単純に
 dstの内部バッファをsrcのバイト数の2倍として予約しておけば
 メモリ確保は一回で済むが、srcが巨大な時、メモリを圧迫し、
 余り良いアルゴリズムとは言えない。

994 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 10:52:13.79 ID:G9ajtZXw.net]
>>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の値は大体で書いたので、厳密には少し違うだろう。

995 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 10:59:39.62 ID:G9ajtZXw.net]
>>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 - 公比 )
を用いた。

996 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 11:04:20.53 ID:G9ajtZXw.net]
>>971
誤: 等比数列の和 = 初項 * ( 1 - 公比^項数) - ( 1 - 公比 )
正: 等比数列の和 = 初項 * ( 1 - 公比^項数) / ( 1 - 公比 )

997 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 12:08:34.21 ID:p964tW2k.net]
俺は数年前業を煮やして自前のstringクラスを作ってしまった(´・ω・`)
・sjis/utf8/utf16/utf32対応で比較・代入などどの組み合わせでも問題なく動く
・どの文字コードでも同じハッシュ値を生成する
・char型がsjisなのかutf8なのかはdefineで決める
・テンプレートベースのformatを用意してprintfを置き換え
みたいな

998 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 12:57:01.80 ID:hL5WeBkj.net]
>>973
保持するときのエンコードは?

999 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 12:58:38.01 ID:p964tW2k.net]
>>974
文字コードの種類に1バイト用意して、後はそれぞれの文字コードで直接保存している

1000 名前:デフォルトの名無しさん [2021/11/14(日) 13:30:12.63 ID:mwYTHPjW.net]
えー
コンストラクタで各種文字コードのバイト列を受け取れるようにして内部保持形式はUTF32でよくない?



1001 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 13:42:53.43 ID:p964tW2k.net]
それだと大きめのテキストファイルを開いたときなどいちいち変換が入って遅くなりそうだから…といっても実際にはどっちが効率良いのかまでは比べてないけど
異なる文字コード同士比較する時なんかはコードポイント単位で読み出して結局utf32ベースで処理するしな…

1002 名前:デフォルトの名無しさん [2021/11/14(日) 13:44:30.36 ID:E00roTgy.net]
>dstのサイズはsrcのサイズの2倍を越えない

しね

1003 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 13:59:19.66 ID:5aeLrxCA.net]
プログラマーは3種類しかいない
文字コードが分からない一般プログラマー
文字コードを理解したと勘違いしている地雷プログラマー
そして人類が文字コードを理解するのは不可能だと悟った上でなんとか事故が起こらないように心を砕く真の専門家だ

1004 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 14:17:19.40 ID:p964tW2k.net]
>>976
あーあとは、これのstring_viewバージョンがあって、関数のパラメータをconst mystring_view& strみたいに受けると、どんな対応してる文字なら(リテラルや対応してるクラス含めて)なんでも参照として受け付けるから便利なんだよね

1005 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 14:59:21.42 ID:WpZMPVn+.net]
それconst&いるんか?

1006 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 15:13:11.67 ID:p964tW2k.net]
実質的にはほとんどなにも変わらないと思うけど、無駄なコピーが減る場合もあるので付けておくに越したことはないと思う

1007 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 15:45:24.64 ID:p964tW2k.net]
まぁ、でも参照もコストゼロってわけじゃないから、場合によっては遅くなることもあるか…

1008 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 16:54:05.80 ID:tkHjD9h1.net]
const って伝播するから嫌い
付けるのは反対ではないが

1009 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 17:26:15.73 ID:CXUBNW9m.net]
伝播ってどういうこと?

1010 名前:はちみつ餃子 mailto:sage [2021/11/14(日) 17:38:21.62 ID:A4GQ1/1N.net]
参照で受け取るときには const を付けないと右辺値を受け取れないんだよ。

&& にしたら逆に右辺値しか受け取れないし、
テンプレートにするのも面倒くさいし、
const 参照で不都合がないならまずそれを選ぶのが常道になってる。

積極的にそうする必要はなくても手癖でやるよね。



1011 名前:はちみつ餃子 mailto:sage [2021/11/14(日) 17:44:17.95 ID:A4GQ1/1N.net]
>>985
const 無しから const 付きの参照へは暗黙の型変換が許されるがその逆はない。
const 付きにしたらそれがずっと伝わっていくってことだ。

元のオブジェクトが const でないなら const_cast で const を剥がして書き換えるのは一応は有りなはずだが、
かなり行儀が悪いしな。

1012 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 17:59:13.06 ID:CXUBNW9m.net]
スコープ限定のconstを欲するひとがいるとは思わんかった

1013 名前:デフォルトの名無しさん [2021/11/14(日) 18:02:00.71 ID:nLCz7RQY.net]
責任ベースのconstは有り得るのでは?
privateが在るんだから。

1014 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 18:05:38.66 ID:leu9kbhs.net]
というか伝播しなかったら困るのでは?
お行儀悪くconst_castしない前提なら
ある関数の引数がconstだったら、その関数が呼び出す関数もまたconstであるという保証は大切だろうし

1015 名前:デフォルトの名無しさん [2021/11/14(日) 18:45:07.42 ID:nLCz7RQY.net]
もちろんそれは大切ですよ。
伝搬しなかったら意味ないし。

1016 名前:ハノン mailto:sage [2021/11/14(日) 19:45:46.13 ID:5CSGBVhH.net]
K&R2 にも const はありますが全然使わなかったなあ…volatile 同様キワモノだとおもっていました(爆)

1017 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 22:33:34.47 ID:oUoND4t/.net]
C++20からコルーチン入るけどコルーチンの返り値に関数内の変数の参照返すの問題になるかな?

hoge& test(){
hoge tmp;
for(int i=0;i<10;++i){
co_yield tmp;
}
}

//返り値は実際はgeneratorとかになるかもしれない

1018 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 22:35:39.21 ID:PetPaRNq.net]
yeild使えるようになるのか

1019 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 01:03:02.10 ID:tPLK0GqY.net]
viewは値渡しが基本だよ

1020 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 06:05:50.61 ID:Rt8JG1Np.net]
何かのリミッタが外れた感じだね
無差別にぶち込むようになった



1021 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 06:11:48.42 ID:Rt8JG1Np.net]
江添が逃げた理由も察しがつく

1022 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 15:55:33.66 ID:Ux5WoKB6.net]
更新してないよね

1023 名前:デフォルトの名無しさん mailto:hage [2021/11/15(月) 16:41:30.12 ID:i/3H6iLT.net]
hage

1024 名前:デフォルトの名無しさん mailto:pow(10,3); [2021/11/15(月) 16:42:03.92 ID:i/3H6iLT.net]
10^3

1025 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 98日 5時間 44分 33秒

1026 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<300KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef