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


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

C++相談室 part158



1 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 18:49:18.44 ID:I69rZ/Of.net]
前スレ
C++相談室 part157
https://mevius.5ch.net/test/read.cgi/tech/1628474251/

4 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 22:07:48.56 ID:Rt8JG1Np.net]
Windows10でrecursive_directory_iterator使うと全角ファイル名が化けまくるんだけど
これwstringバージョンないよね
使い物にならないってこと?

5 名前:ハノン mailto:sage [2021/11/15(月) 22:13:18.15 ID:a976/UsH.net]
>>4
Windows でファイルシステムを操作するなら、もう utf16/W 系を陽に使うしかないのでは
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53

6 名前:デフォルトの名無しさん [2021/11/15(月) 23:03:16.81 ID:Vm/7t1d8.net]
江添さんもRustに行ってしまわれたか。

7 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 23:22:01.05 ID:7YmnbmLD.net]
なんにも確認してないがrecursive_directory_iteratorはpath扱うだけのはずで
wstring云々いいだすのがもう怪しい

8 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 23:27:59.81 ID:Rt8JG1Np.net]
だからそう言ってるんだけど

9 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 23:35:44.25 ID:ebGnmMes.net]
アメ公は多言語のことはあまり考えてないからな

10 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 10:04:00.19 ID:5D9mKY7b.net]
wstringなら解決すると思ってる時点で頭可笑しい

11 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 10:09:17.13 ID:1zCm/6d5.net]
全世界の文字集めたらWORDじゃ足りないことくらいアメ公でなければすぐわかりそうだが

12 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 11:21:28.45 ID:ZG22qfv2.net]
>>11
でも、ハングル文字は、28文字しかないのに 5000ポイントも使っていたり、
元々文字じゃなかった絵文字を勝手に文字の様に扱ったりして行って
肥大化しただけで、世界の文字自体はそんなに多くない。
ユニコードの文字の扱い方に問題が有るんだと思う。



13 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 11:32:32.20 ID:ZG22qfv2.net]
>>12
ハングルは、子音、母音、パッチムは、それぞれ20〜30程度しかないが、
それを組み合わせて1文字に組み立てられているらしくて、組み合わせ爆発で、
1万1000文字を越える。
全ての組み合わせが使われているわけではない。
また、実際に使用される文字は2500文字ほどらしい。
表意文字である漢字は、どうしようもないが、単なる表音文字に過ぎない
ハングルに、Unicodeは、1万1000ポイント以上を割り当ててしまってる。

しかし、漢字も滅多に使わない文字を含めても1万5000文字くらいで、
アラビア文字も28文字くらいしかないそうだから、世界で使われている
本当の文字は、恐らく、4万文字もあれば足りるはず。

ユニコードが16BITで表しきれない以上に厄介なのは、UTF8で表現した時に、
50文字しかないひらがなまで 3バイトになっていること。
カタカナまであわせても100程度しかないのに。
さすがに、アメリカ人の傲慢さを感じざるを得ない。

こんな文字コードを一生使い続けると考えるとうんざりするので、
多分、これが終わりではないだろう。
むしろ、これで終わりにしてはならない。

14 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 11:40:54.61 ID:ZG22qfv2.net]
[追加]
ユニコードの文字数が多い点に関して:
・16BITで表現できない文字の大部分は絵文字。
・数学記号などは数学を扱う時に必須なのに、重要な数学記号が沢山不足している。
 つまり、非常に使用頻度が高い記号が含まれてない。
・逆にどうでもいいような変な遊びの記号などが大量に入っている。
 別にそれはグラフィックで書けばいいのに。

数学記号などは文書の中でも使えるし、学問的にも昔から良く使われているのに
なぜかユニコードには含まれてないものが沢山ある。
それに、呼び方や起源は同じでても、数学的には異なる意味を持つコードが1つに
割り当てられていたり、πが四角く表示されて、数学では絶対に使わないグリフ
になってしまっていたりする。
基礎的な数学まで知らないばかが考えたとしか思えないし、それが
何十年間も改善されてない。
ユニコードは欠陥コード。

15 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 11:45:03.78 ID:ZG22qfv2.net]
>>14
円周率の意味での「パイ」(PI)は、数学では必ず小文字で、かつ、丸みを帯びた
おなじみの記号を使い、決して、門構えのようなπは使わないし、
数学の本では見た事が無い。しかし、ユニコードではそれが標準になっており、
誰が使うのという感じがする。

もう一つは、φの記号。物理学で、磁束を表すのは、くるっと回るφ。
数学の空集合のファイは、ドーナツに棒を貫通させたようなグリフ。
しかし、ユニコードでは両者の区別が訳が分からないことになっていて、
困る。

あとは、⇔の記号が、横方向はあるが、縦方向が無いらしいこと。
これは最悪。

16 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 12:42:55.75 ID:c8tWUMdh.net]
空集合記号とギリシャ文字のファイを混同してるような無知に文句つけられてUnicodeも大変だな

17 名前:デフォルトの名無しさん [2021/11/16(火) 13:52:17.07 ID:5D9mKY7b.net]
TeX

18 名前:デフォルトの名無しさん mailto:test [2021/11/16(火) 14:00:17.37 ID:5D9mKY7b.net]
ΦφФфΦɸØø∅⌀

Φ
Φ
Φ

φ
φ
φ

ϕ
ϕ

19 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 14:03:02.78 ID:5D9mKY7b.net]
unicode.org/reports/tr25/

20 名前:はちみつ餃子 mailto:sage [2021/11/16(火) 15:34:16.32 ID:aaOD7qrs.net]
そもそもが世界中の言語の発展は場当たり的な習慣の積み重ねを何千・何万年と続けてきてグダグダなんだから
それをどうがんばって整理しようとしたところでグダグダなんだわ。
元からグダグダだったのが Unicode のグダグダさとしても表れてきただけ。
言語ごと作り直しでもしない限り綺麗な符号体系にならないんで、
グダグダさと折り合いをつけてつきあっていくしかしょうがない。

21 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 15:36:04.02 ID:Z1xN+BQU.net]
>>16
Unicodeではちゃんと区別されて無いだろ。

22 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 15:36:33.85 ID:Z1xN+BQU.net]
>>20
いや、Unicodeに問題がある。



23 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 15:37:58.58 ID:Z1xN+BQU.net]
>>18
数学の空集合の記号とは違ってる。
どうせ、パイ(π)は四角い変なグリフで、数学では絶対使えない。

24 名前:デフォルトの名無しさん [2021/11/16(火) 15:54:46.23 ID:5D9mKY7b.net]
unicode.org/reports/tr25/
ここの
empty set でもだめ?

25 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 15:56:48.89 ID:c8tWUMdh.net]
>>21
Greek PhiはU+03A6(大文字)・U+03C6(小文字)・U+03D5(数学用シンボル)
Empty setはU+2205
全く別のコードポイントが割り当てられてるし、>>19の資料でも全く別の文字として議論されてるけど
何を見て何がどう区別されてないと思った?

26 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 17:48:24.19 ID:/uf4lfZV.net]
unicodeで一番困るのがソート
単純にコードの大小でソートするとおかしな事になるからな

27 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 18:13:59.22 ID:G/HDu5Xp.net]
>>25
調べてみたが、そもそもグリフが安定していないから数学では使えない。
数学ではグリフによって意味を分けているから。

28 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 18:21:08.03 ID:G/HDu5Xp.net]
そもそも、数学では縦棒が斜めになっているか、縦になっているかでもニュアンス
が違うことがある。
特に空集合の場合、斜めになっていないと、普通の数学的な感覚には
合わない。完全に垂直だと駄目だ。
それに、イタリック体と普通のプレインな書体も、明確に区別できるようになって
ないと、プログラムの本でも使えない。
たとえば、BNFなんかでもそう。
遊びでグリフを変えてもらっては使い物にならない。
後は、カンマの横幅を勝手に狭くするのはプログラマー泣かせ。
カンマは飾りじゃなくて、あるのと無いのとでは大違いだし、
ピリオドと完全に区別できなくてはならないのに、狭すぎて連続した
場合に、フォントが小さい時、非常に判別しにくいことがある。
フォントを作る人は大学以降の数学や物理学に詳しい人に絶対に
聞いて欲しい。

29 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 18:25:30.84 ID:G/HDu5Xp.net]
Appleのスティーブジョブスのせいで、プロポーショナルフォントが多くなり。
それをIDEなんかでも使う馬鹿(=MSのプログラマ)がいて、もうアホかと。
空白は有るのかないのか分からないし、からの「〜」が、上の方にある
チルド~に見えたり、カンマは狭すぎていくつあるのか数えられない、
円周率のπは、数学では決して使うことのない門構えのようなグリフだし。
遊びで変えるな。
芸術ではないんだ、厳密に区別しないといけないんだ、プログラムも
数学も。

30 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 18:25:45.65 ID:Gx8hwJEY.net]
それはUnicodeじゃなくてフォントの問題なのでは

31 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 18:42:34.64 ID:c8tWUMdh.net]
コードポイントとグリフとフォントの区別すらついてない無知蒙昧丸出しで
よくもまあそんな意味のない長文を恥ずかしげもなくグダグダ書き散らかせるもんだ
その度胸だけは褒めたるから、Unicodeに物申す前に基礎から勉強しろよ

32 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 18:46:42.11 ID:G/HDu5Xp.net]
>>31
分かってないのはお前だろ。



33 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 18:46:42.11 ID:G/HDu5Xp.net]
>>31
分かってないのはお前だろ。

34 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 19:02:52.69 ID:nSspXH9s.net]
>芸術ではないんだ、厳密に区別しないといけないんだ、プログラムも
>数学も。
フォントとグリフと書体をこちゃ混ぜにしてる人間がこれ書いてんのギャグだなw

35 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 19:08:30.21 ID:/J0mEe48.net]
3回もNGさせんなゴミ

36 名前:デフォルトの名無しさん [2021/11/16(火) 19:44:20.16 ID:LLUTRYIZ.net]
ユニコードを内包する世界最大の文字集合がGB18030。

37 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 23:08:02.71 ID:FCoZ1v9f.net]
漏れが書いたように思われそうだがちげう
記念パピコ

38 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 07:02:28.15 ID:eMBlRA7Q.net]
自意識過剰

39 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 09:42:16.28 ID:PyX7rfdm.net]
>>36
ハングルを3000文字くらいと、コンポジションに落とし込めなかったのは人類史における、、、まーいーや終わったことだ。
まぁMacでファイル名読むと「パ」が「ハ」と「゜」に割れてマジビビったけどな。

40 名前:デフォルトの名無しさん mailto:test [2021/11/17(水) 11:02:21.42 ID:wlAtkNPK.net]
https://0g0.org/category/13000-1342F/1/
ቻンቻンがቺቻቺቻ

41 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 15:31:08.88 ID:R6z6I769.net]
>>27
Unicode は言語情報を保持しない。
いわゆる中華フォント問題が起こるのはテキストだけからは日本語フォントを適用すべきなのか
中国語フォント (あるいは他の言語) を適用すべきなのかわからないからで、
そのあたりはアプリケーションレイヤで解決する想定になっている。

文字の形が重要なアプリケーションでそれができてないなら単にアプリケーションがカスってだけ。

ギリシャ文字のパイと数学記号のパイも個別に符号を割り当てるべきではないが、
Unicode は既存の文字コードを統合することという要件が現実問題として有るために
既存の文字コードで区別している例があると区別せざるを得ない。

文字コードとしての理想の姿と、
まずは皆が Unicode という規格に載ってこないと理想もクソもねぇという板挟みがある。

42 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 19:44:58.31 ID:cvtz8o7Y.net]
答えは相手が握ってるので俺がただしいなどありえない



43 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 19:45:13.10 ID:cvtz8o7Y.net]
まちがえた

44 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 22:47:12.58 ID:+aW7NpDL.net]
Unicodeとか文字とグリフの区別がぐちゃぐちゃになりつつあるとい
う印象、ど
うしてこうなった?!

45 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 00:03:15.71 ID:Sx+E3gZ7.net]
>>41
いや、円周率を、パイという記号で表すのは中学生でも知っている訳で、
あのおなじみの形状が安定して表示できない段階で文字コードとして終わってる。
文字数の制約があるならまだしも、誰も使わないような漢字や、その場しのぎの
ふざけた記号が大量に含まれているのに、円周率という誰でも知っていて
記号が絶対にあの記号で無ければ伝わらないものに対して、ちゃんとした
記号が安定したコードポイントにはどこにも割り当てられてないのは
大問題。
中国語の文字と日本語の文字の違いよりも影響はずっと大きい。

46 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 00:17:21.61 ID:ypdX2Kse.net]
いいかげんにしろよ
・見た目を決めるのはフォントの仕事であってUnicodeのコードポイント割り当てに文句付けるのはお門違い
・そもそも数学記号用のコードポイントはギリシャ文字とは別にちゃんと割り当てられてる(Mathematical Alphanumeric Symbols)
・ここはC++スレだスレ違い消えろお前の巣はこれだ→https://mevius.5ch.net/test/read.cgi/tech/1593777227/

47 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 01:08:04.34 ID:Sx+E3gZ7.net]
>>46
実際にはちゃんと割り当てられてない。
しかも、フォントの仕事である、と切り分けるのも問題。
というのは、現実に、円周率としては決して使っては成らない
おかしなフォントがパイの自に割り当てられていて、それを回避する方法が
ない。なので、まともなパイのフォントを自作するか、画像ファイルを
用意して画像を挿入するしか方法が無い。

48 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 01:21:19.65 ID:ku1GvVZm.net]
>>47
他の文字コードならそれが回避できるとでもいうんけ?
あほか。

49 名前:デフォルトの名無しさん [2021/11/18(木) 01:36:35.92 ID:Sx+E3gZ7.net]
>>48
まず、円周率の記号は、ギリシャ文字のパイならなんでもいいというわけではないこと
を文字コードやフォントを作ってる人が理解することから始めなければならない。
また、数学で同値記号で使う矢印は矢印だったら何でも良いという訳ではなく、
左右と上下の区別と、二重線か一重線かという好みの問題も含めて、
固定的なフォントでなくてはならない。二重線の場合、中は白抜きでなくては
ならないので、決して塗りつぶすべきではない。

そういうことを理解してない人が文字コードやフォントを作る資格はないのに、
アメリカ人はそれをやってしまってる。アメリカ人は何もかもおかしい。
クラフトマンシップが無い。

50 名前:ハノン mailto:sage [2021/11/18(木) 01:40:47.32 ID:MiW85JEr.net]
>>49
アメリカ人が悪いわけではない、数学者を文字コード制定に加えなかった馬鹿どもがアメリカ人の中にもいる、というだけ、それがどのような属性の人間か容易に推測できるだろう?
というか、TeX をそのまま持ってこればいいだけの話なのにそれすらわからないのは、どういったわけなんだ?

51 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 01:42:39.93 ID:ku1GvVZm.net]
>>49
知らんがな。
それはアプリケーションで解決しろと言ってる。

52 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 01:47:08.17 ID:Sx+E3gZ7.net]
>>50
あなたは、物を知らない。
TeXも実はあまり綺麗ではないし、日本で標準に使われていた数学記号を表示しにくい。
最初、同値記号が長すぎたり、左右方向しかないことにまず、つまずき易い。
回避作が全く無いわけではないが。
近似的に等しいの記号も、日本で馴染みのある上下に点々を打つものは表示しにくい
とかもあるし。
円周率のパイと空集合はさすがに表示できるが。



53 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 01:48:39.42 ID:Sx+E3gZ7.net]
日本人が作っていたソフトには、良いソフトが多かった。
アメリカ人がそれを潰した。
というか、日本人が日本製のソフトを買わない。
例え良いソフトがあっても。
わけが分からん。

54 名前:ハノン mailto:sage [2021/11/18(木) 02:04:24.47 ID:MiW85JEr.net]
>>52
≒ \risingdotseq \fallingdotseq
⇔ \Leftrightarrow
上下方向同値は、なければないでなんとかなるのでは?

55 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 02:12:19.27 ID:G3Aynww3.net]
数学数学うるさいくせにいつまでも用語使いがいい加減なままなのはどういうわけだ
そろそろ文字・記号・文字コード・コードポイント・グリフ・フォント・書体の定義くらい理解して使い分けろよ

56 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 02:23:27.66 ID:Sx+E3gZ7.net]
>>55
グリフとフォントの違いはいくら調べても、あまり分からなかった。
コードポイントは分かる。
しかし、コードポイントに単にギリシャ文字の「パイ」を割り当てていても、
円周率用におなじみのパイであるとは限らず、実際にWindowsでは、門構え
のような変な文字になってしまってる。
そして、それを回避するのは難しい。

57 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 02:26:19.78 ID:Sx+E3gZ7.net]
字体と字形は違うという話もある。
漢字の場合は確かにそうかもしれない。
しかし、数学では最後の形が重要だから、最後の最後の最後の画面上に表示される
グラフィックが、数学の習慣にぴったり一致してなければ駄目。

58 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 07:48:03.24 ID:R1PabgqQ.net]
円周率にギリシャ文字のπを充てた数学が悪い、数学は俺々円周率記号を作るべきだった
って言ってる?

59 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 07:57:54.58 ID:SHW/gJRC.net]
auto \u03c0 = std::numbers::pi;

60 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 09:43:04.76 ID:RYwZiL19.net]
コードは別れてるのだから、あとはデザイナの問題、フォント使用者の問題だろ
外人が作ったフォントの"ゐ"の字が"い"と同じだったからunicodeに"ゐ"の字を安定的に出せるようにしろっていうのはお門違い

61 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 09:55:03.61 ID:maTPk2BR.net]
お前らおっぱいの形で何を興奮してるんだ?w
この変態どもめw

62 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 10:01:42.33 ID:SHW/gJRC.net]
おっぱいに興奮するのは正常な性欲で変態じゃないぞ
あ、変態から見るとノーマルが変態なのかw



63 名前:デフォルトの名無しさん [2021/11/18(木) 11:08:33.41 ID:/He/baLS.net]
うちのπは変換選択中は数学記号のπで一覧に出てるんだが変換確定すると門構えのπになるなω
アプリのフォントとIME(FEP)のフォントが違うんだろうなωωω

64 名前:デフォルトの名無しさん [2021/11/18(木) 11:10:13.05 ID:/He/baLS.net]
秀丸なら数学用のπだし
メモ帳だと門構えのπだったわ
TeX使ったらどうでもよくなるけど

65 名前:デフォルトの名無しさん [2021/11/18(木) 11:17:33.47 ID:/He/baLS.net]
とりあえず
メイリオは糞π
MS Gothic は 数学用π
MS 明朝は 数学用π
みかちゃん ぎりぎりセーフ
Migu 1M 数学用π
IPAex Gothic 数学用π
IPAex 明朝 数学用π

んーいまのところだめなのメイリオだけだなω

66 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:20:46.59 ID:RYwZiL19.net]
56はwindowsがって言ってんだから全部ダメなんだろ

67 名前:デフォルトの名無しさん [2021/11/18(木) 11:57:56.18 ID:/He/baLS.net]
>>56
>それを回避するのは難しい。

えっ?

68 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 17:51:51.89 ID:hyycWvP/.net]
using namespace std;
するのとstd名前空間内の各エンティティについて
using std::foo;
するのに違いはありますか?

69 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 21:59:19.03 ID:asQz6rBs.net]
はい。前者は std 内全部の名前が修飾なしで使えるようになりますが、後者は指定したものだけになります。

70 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 23:09:08.75 ID:tPrhQHc6.net]
明朝体とかゴシック体がフォント
明朝体で書かれた「あ」とゴシック体で書かれた「あ」は異なるグリフの「あ」
文字としては同じ

ということのはず

71 名前:セがユニコードはぐちゃらけてしま
tったど
うしてこなうった!?
[]
[ここ壊れてます]

72 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 23:11:14.48 ID:tPrhQHc6.net]
ググったらJISで「♯」と「#」が異なる文字だからユニコードでも元に戻せるように異なるコードにしているとか
ワケワカメ
一昔前の似たような文字を同じコードにする方針な美しいユニコードはどこいった……?!



73 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 23:12:14.00 ID:tPrhQHc6.net]
訂正orz
△:異なるコード
○:異なる文字

74 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 00:01:43.17 ID:bln5kEpJ.net]
>>71
シャープとナンバーサインは違う記号で違う意味でしょ。
カタカナの「ロ」と漢字の「口」まで統合されかかったというエピソードもあるんだが、
そういうのが Unicode の美しさだと思うか?

何を以て「似たような文字」とするか文字に対する考え方というのは
それぞれの文化によるによるので既に確立している符号体系を尊重するのは合理的な方針なんだよ。
歴史的経緯を切り捨てられないのは不格好だが逆に言えば既存の不格好さを継承する程度で済む。

75 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 08:12:17.83 ID:Lvg3H2b6.net]
>>71
CJK統合漢字の大失敗に懲りたんだろ。

76 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 09:07:31.36 ID:jz7MocuB.net]
ここC++のスレだよな?

77 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 10:51:32.62 ID:Zjxpzk7M.net]
そうだよスレ違いのUnicode叩きも擁護も出て行け

78 名前:デフォルトの名無しさん [2021/11/19(金) 11:12:38.26 ID:eyeX0xyM.net]
♯include は動かない方が良い
\ も mac だとやばい \ があるらしいなω

79 名前:デフォルトの名無しさん [2021/11/19(金) 11:14:02.03 ID:eyeX0xyM.net]
codepadだかideoneだかが
\nを勝手に半角の¥nにしてコンパイル通らなくて可笑しいときがある

80 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 11:30:01.23 ID:IBPJGhlA.net]
>>77
素人丸出しだからそのへんでやめとけ
\が(過去の経緯で)本来あるべきグリフで表示されないのはwindows(日本語設定時のみ)のほう

81 名前:はちみつ餃子 mailto:sage [2021/11/19(金) 13:02:30.99 ID:bln5kEpJ.net]
JIS X 0201 (7ビット及び8ビットの情報交換用符号化文字集合) による。
JIS X 3010 (プログラミング言語C) の中でもスラッシュとチルダが JIS X 0201 では円記号とオーバーラインに
置き換えられる旨の補足情報が書かれている。

つまり Windows の挙動は日本の (文字コードに関する) 規格を尊重した結果だし、C の JIS 規格でもちゃんと言及している。
とはいえ ISO/IEC 9899 に反する事情があるからこそ日本の規格 (JIS) にするにあたって補足を入れる必要があったわけで、
「本来あるべき」から遠いのは確かに Windows のほうとは言える。

82 名前:デフォルトの名無しさん [2021/11/19(金) 14:07:51.51 ID:eyeX0xyM.net]
>>79
知ってると思うが
これの話なんだが
codepad.org/WsmFWVty
#include <stdio.h>

int main()
{
printf("abc\n");
return 0;
}



83 名前:デフォルトの名無しさん [2021/11/19(金) 14:10:16.50 ID:eyeX0xyM.net]
>>79
これも一緒ね
https://ideone.com/KyjIyk
どうでも良いけどω

84 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 15:13:48.52 ID:gL3kBbt5.net]
どうでもいいのは勘違いしてるお前の話

85 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 17:22:13.91 ID:r4tdjD9P.net]
アホすぎる
C++の話しようぜ

86 名前:デフォルトの名無しさん [2021/11/19(金) 18:47:23.14 ID:P2N6jWZN.net]
WindowsのvisualC++2019でDLLのロードが出来ません
dll defからlibをつくり#pragma comment( lib, "sample" )とやればできた記憶なんですが
64bitのバージョンも全部合わせてあるんですが
10年ぶりにやったら動きません
ボーランドC++だと修飾名が変わってdefを書き換えたりはあったと思うのですが

> error LNK2019: 未解決の外部シンボル sqlite3_open

87 名前:85 [2021/11/19(金) 18:53:32.17 ID:P2N6jWZN.net]
自己解決しました
dumpbin.exe /exports コマンドでdefファイルを作成した場合、
EXPORTS の記述がなかったからでした

88 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 00:18:32.03 ID:KMJ1ohr2.net]
>>81
エスケープを円で覚えてるからそんな間抜けな間違いするんだよ
ブログラマならエディタの設定変えとけ

89 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 04:22:38.39 ID:VRiN34hT.net]
>>81
馬鹿過ぎて

90 名前:デフォルトの名無しさん [2021/11/20(土) 11:48:10.21 ID:DTIeq0Vp.net]
>>87
ブログラマってなにかの隠語?

91 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 12:05:58.69 ID:T1SqYaku.net]
ナニナニ
    彡⌒ ミ ナニナニ
   (´・ω・`) 彡⌒ミ
,彡⌒ 彡⌒ ミ (・ω・`) また文字コードの話?
(´・ω(´・ω・`) ⌒ ミノ⌒ミ
  u_| ̄ ̄||´・ω・`)ω・`) マター?
 /旦|――||// /|と ノ
 | ̄ ̄ ̄ ̄ ̄| ̄| . |-u
 |_____|三|/

92 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 19:11:01.64 ID:F5vrtFYR.net]
>>90
プログラマ=ハゲと思われるからそのAAやめろよ(´・ω・`)



93 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 03:33:39.04 ID:yh1CvOcy.net]
実際C++プログラマはハゲが多いんだから別にいいだろう
教祖からしてハゲなんだし

94 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 08:40:03.48 ID:uokK0Aao.net]
そうそう、教祖がゲーハー
これはデカい

95 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 17:11:36.41 ID:BwaLJwgU.net]
Greek PhiはU+03A6(大文字)・U+03C6(小文字)・U+03D5(数学用シンボル)
Empty setはU+2205
全く別のコードポイントが割り当てられてるし、>>19の資料でも全く別の文字として議論されてるけど
何を見て何がどう区別されてないと思った?

96 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 20:56:14.20 ID:MSJBJTi1.net]
プログラミング言語の世代論というのがあって、
第一世代は CPU のアーキテクチャべったりの機械語、
第二世代は機械語が解る人間向きの低級言語、
第三世代は自然言語寄りの高級言語、
第四世代は目的型言語、
…… で、いわゆる「第五世代」は、コンピュータの都合じゃなくて
人間の都合に合わせようよ、というコンセプトになった。
「じゃあ、どのあたりから始めるか」という話は
ありそうに思う。

97 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 22:09:51.70 ID:jS7RYefb.net]
>>79
素人丸出しとか言ってるが
実際macだと設定によってはバックスラッシュと同じ扱いにならない\が
普通にキー叩いたら出るんだぞ

98 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 22:16:19.52 ID:32ll5fa9.net]
エスケープが円だと思ってるから間違えるんだろ

99 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 22:42:33.87 ID:zasxIKRm.net]
普段からU+005Cのグリフがバックスラッシュになってるフォントしか使わないから円記号に違和感しかない

そりゃ個人の自由だけどプログラミングしてるなら少しフォントにこだわってもいいと思う

100 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 11:36:57.09 ID:/m9OFYAK.net]
日時を数値に変換する良い感じの関数教えてくださいよ

101 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 11:53:19.81 ID:NpEcC+CD.net]
std::chrono

102 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 12:07:40.30 ID:axkd8Lua.net]
おどろき最小の法則と言えば
https://onihusube.hatenaぶろぐ.com/entry/2020/04/03/211442



103 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 12:12:11.62 ID:buYIHjVZ.net]
人を下に見られる程精通してる人って正直羨ましいわ
知れば知るほどまだまだ知らない事が沢山あるなぁと勉強不足を実感してしまう

知らないから人をバカに出来るんだよなー

むしろ人を下にみないと精神状態が不安定なんでしょ

104 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 12:23:22.14 ID:NpEcC+CD.net]
ダニングクルーガーね

105 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 13:29:19.96 ID:SX8MGonp.net]
Windows App SDK入れてみたがエラーが多くまだ使えない

106 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 19:04:02.58 ID:aHjY0LXr.net]
ヘッダファイルで変数の宣言するとき、引数付きのコンストラクタ使おうとするとコンパイルエラー出るんですけどこの書き方って良くないんですか?

107 名前:ハノン mailto:sage [2021/11/22(月) 19:08:25.29 ID:f9+TjGGq.net]
>>105
ヘッダだからエラー、というわけではないです
ヘッダじゃない普通の cpp に書いてもエラーなのでは?
具体的にソースを示してください

108 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 20:43:52.70 ID:aHjY0LXr.net]
>>106
// NG ヘッダにそのまま書こうとすると型指定子が必要ですとエラーが出る
private:
MenberLibClasse obj ("piyopiyo");

// OK ヘッダには引数なしで宣言した後、cppでobjをメンバに持つクラスのコンストラクタの初期化子リストを使うと何故か通る
private:
MenberLibClasse obj;
Class() :obj ("piyopiyo") { }

挙動把握しきれないんですけどライブラリ側の問題でしょうか??

109 名前:ハノン mailto:sage [2021/11/22(月) 20:50:48.90 ID:f9+TjGGq.net]
>>107
NG のときのエラーの内容は?
エラーメッセージを貼ってください、正直、よくわかりません

110 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 20:56:23.56 ID:0LbM6y2O.net]
>>107
宣言の位置でメンバを初期化できるのはC++11からだけど、それが原因かな?

111 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 20:59:28.54 ID:UBpGrDL8.net]
書くとしたらこうやろ
private:
MenberLibClasse obj = "piyopiyo";

112 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 21:02:09.68 ID:jXuEZ/Sz.net]
丸括弧はダメだよ
イコールか波括弧でなきゃ



113 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 21:04:04.13 ID:jXuEZ/Sz.net]
型指定子が必要って言われるのは
関数宣言と見られていて
仮引数の場所にリテラルがあるってことだ

114 名前:デフォルトの名無しさん [2021/11/22(月) 21:13:00.22 ID:aHjY0LXr.net]
>>111
イコールはダメで波括弧に変えたらコンパイルできました

115 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 21:30:02.05 ID:ahYOm2Qx.net]
private:
MenberLibClasse obj{"piyopiyo"};

116 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 23:03:46.80 ID:gucWMAFN.net]
>>99
using namespace std::chrono;

// 現在時刻を取得
system_clock::time_point tp = system_clock::now();

// 現在時刻のミリ秒部分を取得
auto msec = duration_cast<milliseconds>(tp.time_since_epoch()).count() % 1000;

みたいなことをやると良い最後のまmillisecondでもsecondでもnanosecondでも逝ける

こないだ死ぬほどやり倒すた、

しかしずんねんながら現状MSVCのstd::chrono::zoned_timeが未実装のため、

システム時刻関連処理についてstd::chronoの利用を断念すた、orz

117 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 23:16:45.51 ID:gucWMAFN.net]
なおtime_point同士で引き算もできる
結果を具体的時間単位の時間表現にするのは同じくduration_cast<T>()

118 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 10:20:15.57 ID:wZOweAJh.net]
ostringstream の precision の上限がなぜか 255 に設定されているようで
mpreal big("1000桁規模の浮動小数点数");
ostringstream ss;
ss.precision(1000);
ss << big;
とすると ss に 255 文字程度しか入らないのです
cout.precision(1000);
cout << big;
だと 1000桁出ます
ostringstream の precision の上限をもっと大きくする方法はありますか?

119 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 10:22:20.09 ID:wZOweAJh.net]
ああ
勘違いかも
もうちょっと調べて質問します

120 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 10:28:59.05 ID:wZOweAJh.net]
とりあえず判ったのは
ss.rdbuf() の default の上限値が 255 らしい

121 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 10:53:38.11 ID:v39GCTAR.net]
だっせ
そんな上限、規格票に書いてあるのか?

122 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 11:40:46.26 ID:Vfqk4Xs7.net]
>>115
>MSVCのstd::chrono::zoned_timeが未実装

TZ=JST-9
とか描いてあってもだめかな



123 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 11:52:24.16 ID:wZOweAJh.net]
>>120
ss.rdbuf()->in_avail()

124 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 13:42:01.58 ID:X+sq98An.net]
再現しそうな最小限のコードだけ描いて
mingw + gcc でコンパイル&実行したら期待通りの動作をしたが
VC だとやっぱり上限があるっぽい動きになってる
rdbuf() 使いつつ seek() すれば大丈夫かも知れないが
自分の使い方が間違ってるだけだと思いたい

125 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 13:44:07.61 ID:X+sq98An.net]
とりあえず mpreal は関係なかった
VC 側の問題らしいのでもう少し掘ってみる

126 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 14:39:06.53 ID:X+sq98An.net]
VC 側 rdbuf()->pubseekpos() 併用で解決

127 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 15:22:40.52 ID:V3fVQTwt.net]
クラスのメンバ変数が全部intとかdoubleとかで足し算掛け算ができるものの場合に、
クラスの足し算掛け算を各メンバ変数の足し算掛け算として定義したいのですが
operator +とかoperator *のオーバーロードでメンバ変数について一個ずつ書いていく以外の方法ありますか?

今やろうとしていることでメンバ変数が多いので、いちいち列挙せずに済むなら便利だなと思ったのですが

128 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 15:49:25.55 ID:57zkg5+u.net]
>>126
valarrayじやね?

129 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 16:47:46.55 ID:za9QU+hA.net]
>>117
VC の in_avail() が間違った値を返してるんだなこれ

130 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 17:12:53.52 ID:V3fVQTwt.net]
>>127
ありがとうございます、使ってみます

131 名前:はちみつ餃子 mailto:sage [2021/11/23(火) 17:34:18.50 ID:VSfhJ4CF.net]
>>126
現在の C++ はリフレクション系の機能が弱くてクラスからデータメンバを列挙するというようなことは出来ない。
「全てのメンバに対してやってくれ」というようなことはできない。
ただ、対象となるメンバを取り出すものさえ用意すればそれを様々な演算に適用することは可能だと思う。
つまり、メンバの列挙を一度で済ませる (なんども列挙しなくてよい) ことは出来るかもしれないってことね。

とはいえそれはそれで割とクソめんどうくせぇメタプログラミングの下準備が要るので
いっそ列挙しまくったほうが簡単かもしれん。

132 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 17:57:00.33 ID:UgBkVfMX.net]
Q_OBJECT とかだとメンバの列挙出来たっけ



133 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 23:10:58.29 ID:G9Rlesey.net]
>>121
駄目なんじゃないかと思う
std::chronoはtime_pointを抽象化してタイムゾーンの異なる時刻間の差分を自動で取り扱いたい(そういう思想な)はずで、
ということはローカルタイムを扱う手段としてzoned_timeは無くてはならないピースとみなさざるおえない

どうしてもというならstd::chrono::system_timeを経由して古き良きtime_tとtime_pointの相互変換ができるから、
time_tまで降りてローカルタイムにしてtime_pointに戻す手はあるが、それをすると
同じtime_pointクラスで表される2種類のシリアル時間がプログラム内に生じてしまうから、
std::chronoの上記思想(時刻の差分や比較を自動で安全に取り扱いたい)が破壊される



134 名前:宴Cブラリ仕様の理想が高邁すぎるか実装側の怠慢によって大事な用途において糞ライブラリになってしまっている例 []
[ここ壊れてます]

135 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 23:41:07.98 ID:mX+uwseB.net]
何が出来ないと言っているのかまるで分からん
出来る部分と出来ない部分の切り分けがいるんでないの?

136 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 00:03:21.95 ID:EdXujyLt.net]
time_point(事実上UTC)とローカルタイムの相互変換がstd::chronoが思想的に目指しているほど安全にはできない
zoned_timeが実装されない限り

time_point(事実上UTC)同士の比較や差分はzoned_timeが実装されてないバージョンでも安全にできる

137 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 00:18:07.67 ID:HKyZluCV.net]
そんなアバウトな情報いらん

138 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 00:31:14.95 ID:EdXujyLt.net]
えっと、>>135はUTCとローカルタイムの変換ってわかります?

139 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 00:39:36.48 ID:EdXujyLt.net]
std::chronoで現在時刻を取得する一番自然な方法は、
 system_clock::time_point now = system_clock::now();

他にもtime_tからの変換という方法があるが、いまさらtime_t使え言うぐらいならstd::chrono使わずにtime_tだけ使うは;;;

で、nowはどう見てもUTCであるから、日本時間を知りたければ、
上記time_point nowが日本時間の何年何月何日の何時何分何秒なのかを出力できねばならない
std::chronoの中にはzoned_timeを使わずにそれをやる手段が見当たらない

140 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 00:44:19.87 ID:jtZYcQVF.net]
C++20より前のchronoはタイムゾーンのこと知らんからな…

141 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 01:06:29.20 ID:HKyZluCV.net]
>>99で聞かれてるのは「日時を数値に変換」だろ?
前提も条件も全部曖昧で、自然とか思想とか思い込みばかり
何を使うと何が出来て何が出来ないを全く説明してない

142 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 01:21:45.20 ID:Jllasahs.net]
chronoはローカルタイムを扱えない、と言ってると思うよ



143 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 02:40:02.07 ID:xFDMAHHD.net]
pbs.twimg.com/media/EUH_eMWUwAAgsV4.jpg
https://pbs.twimg.com/media/D4p7dNfUwAAa34y.jpg

144 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 03:00:57.55 ID:P1gN11rG.net]
ローカル時刻かUTCか以前の問題として、そもそもどんなフォーマットで数値に変換するのか
それが不明だったから誰も回答しなかったのだろうに

あとドキュメント信じる限りじゃzoned_timeはVS2019 16.10から使えるってよ

145 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 03:04:53.60 ID:Q5JPayEq.net]
C++は糞
std::は糞ばかり
boost最強
まで読んだ

146 名前:デフォルトの名無しさん [2021/11/24(水) 03:08:01.30 ID:Q5JPayEq.net]
>>142
>>100 が悪い

147 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 04:22:29.20 ID:xFDMAHHD.net]
じゃ、もうtime_t使っとけ

148 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 05:14:05.40 ID:ZtAViqSQ.net]
「良い感じの関数」なんて今流行りwのAIとか使わんと無理でしょ

149 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 07:01:18.14 ID:xQvD3wWY.net]
確かにchronoは今一だね
filesystemはthread, iomanipとの連携が悪すぎ
使いにくいったらありゃしない

150 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 07:01:39.82 ID:xQvD3wWY.net]
- filesystemは
+ tilesystemや

151 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 08:47:11.69 ID:xQvD3wWY.net]
auto p = (void*)[]{};
これが通らないんだけど
stateless-lambdaは関数と見なせない?

152 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 09:11:02.53 ID:083KFMkM.net]
auto p = (void*)(void (*)())[]{};



153 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 09:17:04.13 ID:xFDMAHHD.net]
auto p = []()->void*{};
もう少し学習しろ

154 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 10:46:50.00 ID:kXzWnsgO.net]
何がしたいんか知らんけど
auto p = [](){};
auto p = []()->void*{};
auto p = []()->void{};
本人の意図が判らんことには絶対に正解に辿り着けない質問大杉

155 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 11:11:35.49 ID:xQvD3wWY.net]
void func1(void*);
void func2(){}
func1(func2);
のようなことをしようとしてて怒られるから
func1((void*)func2);
にしてた

で、func2で名前空間を汚染したくないから
stateless-lambda使おうと思った

156 名前:はちみつ餃子 mailto:sage [2021/11/24(水) 11:25:51.06 ID:nY9AsqgQ.net]
関数 (関数ポインタ) を void* で受ける雑なことをしといて名前空間を汚すのは気にするのか。
まあフレームワークとかの側でそうなってたら仕方ない場合もあるけど……。

157 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 11:28:11.15 ID:P1gN11rG.net]
variant的なことを昔ながらの方法でやっているのかもしれない

158 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 11:41:52.30 ID:kXzWnsgO.net]
auto p = []()->void*{return NULL;};
↑これはOKだが
auto p = []()->void*{};
↑こっちはコンパイルエラーにして欲しいよね

159 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 11:48:13.06 ID:jtZYcQVF.net]
単にステートレスラムダを関数ポインタに変換したいならこういう有名なハックがある
auto p = +[]{};

160 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 12:47:46.56 ID:xQvD3wWY.net]
>>157
おお、これはいい
dx

161 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 12:55:27.21 ID:xQvD3wWY.net]
ポインタに単項プラスなんぞ考えたこともなかった
void test(char* p)
{
cout << +p << endl;
cout << *+p << endl;
cout << *(0+p) << endl;
cout << 0[p] << endl;
}

162 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 15:19:51.62 ID:083KFMkM.net]
生配列をポインタに変換するときも単項+使うね



163 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 15:33:19.13 ID:kXzWnsgO.net]
>>160
何が嬉しいの

164 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 09:42:14.59 ID:r5Heuy4P.net]
C++11 や C++17 や C++20 とかどのオプションでコンパイルされているかを
コンパイル中に判断したいのですが
ソースコード中にどう書けばよいのですか

165 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 10:11:07.71 ID:r5Heuy4P.net]
解決
https://docs.microsoft.com/en-us/cpp/build/reference/std-specify-language-standard-version?view=msvc-160
_MSVC_LANG

166 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 10:12:19.59 ID:lTzmbhqT.net]
全然解決してなくて草

167 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 11:00:47.97 ID:nZfwh6w7.net]
>>161
#include <iostream>
#include <cstdio>
int main() {
int a[] = {1, 2, 3, 4};
std::printf("%p %p\n", &a, &a + 1);
std::printf("%p %p\n", +a, +a + 1);
int (*p)[4] = &a;
std::printf("%p %p\n", p, p + 1);
int *q = &a[0];
std::printf("%p %p\n", q, q + 1);
return 0;
}
0x7ffd548f5d00 0x7ffd548f5d10
0x7ffd548f5d00 0x7ffd548f5d04
0x7ffd548f5d00 0x7ffd548f5d10
0x7ffd548f5d00 0x7ffd548f5d04
つまり&a[0]と書くのを+aと書くだけですませられる
どっちが分かりやすいかはさておき

168 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 11:28:16.28 ID:pIkhaGD2.net]
__cplusplus マクロ見るんじゃね?普通は
あとは言語機能ごとのマクロ見たり

169 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 11:38:56.35 ID:lTzmbhqT.net]
まるで間違ってて草

170 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 13:18:45.98 ID:U2fItJ5c.net]
>>165
<iostream>いらないね

それとlvalue transformationがかかる場面で
わざわざ単項プラスを使う必要性が
そのサンプルでは示せてないようだが

171 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 14:43:49.72 ID:Ts2h3uwp.net]
みんなテキトーだなー(棒)

172 名前:はちみつ餃子 mailto:sage [2021/11/26(金) 02:28:38.10 ID:qCsl9kRb.net]
>>166
処理系がちゃんとそのへんのルールを守ってくれればいいが現実は非情である。



173 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 21:22:58.84 ID:Hq7eoo6P.net]
https://www.youtube.com/watch?v=ia8GncoXA1s

174 名前:デフォルトの名無しさん mailto:sage [2021/11/27(土) 03:24:08.24 ID:ymghmbi1.net]
The following macro names shall be defined by the implementation:
__cplusplus
The name __cplusplus is defined to the value 199711L when compiling a C++ translation unit.

G++ now sets the predefined macro __cplusplus to the correct value, 199711L for C++98/03, and 201103L for C++11.

gcc.gnu.org/gcc-4.7/changes.html
But g++ < 4.7.0 is __cplusplus defined alway 1.

https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/

175 名前:デフォルトの名無しさん mailto:sage [2021/11/27(土) 04:01:44.14 ID:7zx+CKid.net]
いまさらかよ

176 名前:デフォルトの名無しさん mailto:sage [2021/11/27(土) 12:26:56.81 ID:tS+5RcHX.net]
マジかよ知らなかった
GCCくんさぁ…

177 名前:デフォルトの名無しさん mailto:sage [2021/11/27(土) 13:29:25.44 ID:at/FeDW1.net]
>>174
初心者?

178 名前:デフォルトの名無しさん mailto:sage [2021/11/27(土) 14:01:53.67 ID:7zx+CKid.net]
リナスもg++の設計にはイラチMAXの筈だわ

179 名前:デフォルトの名無しさん mailto:sage [2021/11/27(土) 15:41:12.47 ID:dxTMcmeT.net]
Rust厨に弱みを魅せるな

180 名前:デフォルトの名無しさん mailto:sage [2021/11/27(土) 16:22:10.07 ID:GY7utvzm.net]
よわみにはつけこまれる

181 名前:デフォルトの名無しさん mailto:sage [2021/11/28(日) 21:05:38.19 ID:6joWVJIB.net]
C++でblas, lapackを使うのにいいインターフェースってどれでしょうか?
調べてたらCppLapack, Lapack++、armadillo とか出てきましたが、定番さとか使いやすさとか教えていただけると嬉しいです

とりあえずは複雑なことはしない予定で、行列の掛け算とか対角化ぐらいが簡潔に書けると嬉しいです

182 名前:デフォルトの名無しさん [2021/11/29(月) 00:38:26.49 ID:UEkaTEcQ.net]
久しぶりにC++再開したが
昔からだが
PHPはC++のスクリプト版といえるかのように文法・関数が似てるから
プロトタイプをPHPで作成したほうが時短になるかと?
仮想コードによるアルゴリズムの記述やフローチャートなどに近い



183 名前:デフォルトの名無しさん [2021/11/29(月) 00:43:30.91 ID:UEkaTEcQ.net]
行列の掛け算とか対角化ならPythonかマキシマでいいとおもうが?
大規模だともしかしたらC++のほうが早いかもしれないが
PythonだとGoogle ColaboratoryとかでGPUをネットワーク使用できたりするが



Colaboratory とは
Colaboratory(略称: Colab)は、ブラウザから Python を記述、実行できるサービスです。次の特長を備えています。
環境構築が不要
GPU への無料アクセス
簡単に共有
https://colab.research.google.com/notebooks/welcome.ipynb

184 名前:デフォルトの名無しさん mailto:sage [2021/11/29(月) 01:05:44.61 ID:roEk3hNb.net]
宣伝はお断りしています

185 名前:デフォルトの名無しさん mailto:sage [2021/11/29(月) 06:13:36.91 ID:i8Ax0msm.net]
>>179
BLASというとvalarrayだね

186 名前:デフォルトの名無しさん mailto:sage [2021/11/29(月) 11:31:29.88 ID:W4Pu+K5+.net]
>>183
は?

187 名前:デフォルトの名無しさん [2021/11/29(月) 14:27:16.33 ID:Afxc3rI9.net]
>PHPはC++のスクリプト版といえるかのように文法・関数が似てる

迷惑するから出鱈目言うな

188 名前:はちみつ餃子 mailto:sage [2021/11/29(月) 14:43:58.00 ID:cgXmRWbT.net]
因果が逆だろう。
似た使い方しかしない人間にとっては似て見えるということもあるんだろうさ。

189 名前:デフォルトの名無しさん mailto:sage [2021/11/29(月) 14:54:09.52 ID:Swm9PZmw.net]
いや激しく誤解を生む情報だと思うw

190 名前:デフォルトの名無しさん mailto:sage [2021/11/29(月) 15:15:20.73 ID:zo5XubVi.net]
制御構文が似ていれば似ているように見える人というのは一定数いる
それしか使わないから

191 名前:デフォルトの名無しさん mailto:sage [2021/11/29(月) 15:19:08.39 ID:LzdsKRCS.net]
C++のこともphpのことも両方ニワカじゃないとなかなか出てこない発言
昨日今日入門書めくってるくらいのレベルじゃないとなかなかできない発言

192 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 09:50:00.96 ID:abbimJAH.net]
template<class T>
void f(T x) {
auto a = x, b = 0;
}

f(0.0);

これgccだとコンパイル通るけど規格的にはダメだよね?



193 名前:デフォルトの名無しさん [2021/11/30(火) 09:57:35.75 ID:+4eAilPB.net]
ok

194 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 10:46:34.33 ID:LDqTXpbe.net]
何が駄目になるの?

195 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 10:48:39.10 ID:b4Wv8Im2.net]
autoの推定がxから導かれるdoubleと0から導かれるintで矛盾しないかって話

196 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 10:51:24.87 ID:icNXz82r.net]
そもそも何の規格だよ
問題あるなら書き直せばいいだろ

197 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 10:58:47.10 ID:b4Wv8Im2.net]
>>190
clは弾くぞ

198 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 11:18:37.50 ID:rIKeeiBO.net]
https://eel.is/c++draft/dcl.type.auto.deduct#def:placeholder_type_deduction
For a variable declared with a type that contains a placeholder type, T is the declared type of the variable.

https://eel.is/c++draft/dcl.spec.auto.general#7
The type of each declared variable is determined by placeholder type deduction, and if the type that replaces the placeholder type is not the same in each deduction, the program is ill-formed.

Draft これでいいか分からんけど、多分ダメですね
a と b は個別に型推論して、同一でなかったら ill-formed であると読める

199 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 11:29:55.04 ID:dtpnJADB.net]
https://wandbox.org/permlink/GOps3Ikgl1VsvwoU
gcc6.3.0以下とclangだとちゃんとエラーになるな

200 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 11:33:54.11 ID:dtpnJADB.net]
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79009

201 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 11:34:06.53 ID:LDqTXpbe.net]
0の部分static_castしなきゃ駄目ということか。なるほど

202 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 13:11:18.23 ID:b4Wv8Im2.net]
g++ 10.3.0は-pedantic指定しても通すな



203 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 13:27:36.30 ID:icNXz82r.net]
バカか
0は何にだって成れるだろ

204 名前:デフォルトの名無しさん [2021/11/30(火) 13:38:43.96 ID:rrAtEbdN.net]
C++とPHPが似てないというニカワかと?
Pythonやルビーやjavascriptよりも似てるだろ?
C++にある関数をそのままPHPでも使えるようにしてあるのが多いし

205 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 13:39:41.94 ID:b4Wv8Im2.net]
>>201
これやってみ
cout << typeid(0).name();

206 名前:デフォルトの名無しさん [2021/11/30(火) 14:06:04.92 ID:+4eAilPB.net]
>>202
そんなだから馬鹿って言われるんだ

207 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 18:50:06.68 ID:5lYBSuU/.net]
C++Builder使った後にVisual Studio使って、
二層作ったらC++Builderがめちゃくちゃ簡単で
作りやすかったんですけど私の感覚、何か変?
Visual Studioより効率いい気がしました。

208 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 19:29:52.87 ID:32XX4NDe.net]
20年以上前ならいざしらず今C++Builderなんて使おうとする人は変としか・・・

209 名前:デフォルトの名無しさん [2021/11/30(火) 19:37:40.43 ID:TJjyIr2u.net]
普通はRust使うよね。

210 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 19:38:36.27 ID:ARnSQzz0.net]
くそ言語Rust

211 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 19:52:55.16 ID:icNXz82r.net]
c#だろ
バカめが

212 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 20:01:01.54 ID:xp1LudPy.net]
20年以上前は言い過ぎ
自分は2009を大事に使っている



213 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 21:27:19.33 ID:32XX4NDe.net]
うちでは2000年以降のborlandはそれ以前に開発されたものの保守以外で使用することはなかったから
2000年以前でもほぼMSVCの独壇場だった

214 名前:デフォルトの名無しさん mailto:sage [2021/11/30(火) 21:31:10.33 ID:XVXDilRK.net]
BuilderというよりRAD Studioやろ?

215 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 23:25:36.03 ID:toM1ybPg.net]
>>14
数学記号増やしたところで、数学記号はレイアウトの問題がかなりついて回るのであまり意味ないと思うけどなあ。2^2^2^2とか、定積分とか、分数とか表現できないでしょ。
そういうのは組版の問題。
まあ、たしかにイタリックのxとかはあるのに、イタリック(?)のπはないとかは、中途半端な気はするけどね。

216 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 08:09:16.16 ID:5C7dh5cI.net]
std::set にラムダ式渡すとき
std::set<T, decltype(comp)> s(comp);
ってなるのダサすぎるんだけどどうにかならない?
std::set<T> s([](T x, T y) { return x < y; });
みたいに直接書きたい

make_set みたいな関数テンプレート用意すれば解決するのはわかるんだけどクラステンプレートだとどうしてダメなんだ

あとこれが自作クラスだった場合推論補助とかでどうにかできるんだろうか

217 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 08:50:46.97 ID:boATToTk.net]
>>214
これなら通るんだけど
template <typename T> std::set(T(&)(T,T)) -> std::set<T, T(&)(T,T)>;
int comp(int x, int y) { return x < y; }
std::set s(comp);

compをラムダやテンプレートにするとdeductionに失敗するね

218 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 08:57:10.12 ID:l5gglxms.net]
>>213
だからさー、あなたが使うフォントで期待したπが表示されないのはフォントのデザイナの問題であってunicodeの問題じゃない
ちゃんと区別できるようになってるんだから

219 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 10:08:07.72 ID:0ZST/pCU.net]
>>214 std::function<bool (T,T)> 使っちゃダメなの?

220 名前:デフォルトの名無しさん [2021/12/02(木) 15:14:03.44 ID:2R2gcOCs.net]
πの人まだいたんだなω

221 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 16:55:10.70 ID:BMPRSKoA.net]
>>216
どうでもいい絵文字よりは、数学記号は考慮してほしかったですよね
というかピクトグラムの意味がわかりません、漢字の方がマシ

222 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 18:05:22.46 ID:X/wGilGd.net]
>>219
>>46

Mathematical Italic Small Pi
ttps://www.compart.com/en/unicode/U+1D70B

Mathematical Alphanumeric Symbols
ttps://www.compart.com/en/unicode/block/U+1D400

で、何だっけ?
イタリック(?)のπはない、だったっけ?



223 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 18:17:52.07 ID:BMPRSKoA.net]
>>220
せめて
https://meta.wikimedia.org/wiki/Help:Displaying_a_formula/ja
に載っている文字は全部表示してほしいですね… >>220 は全然足りないとおもいますよ

224 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 19:00:15.54 ID:xMkISEUv.net]
>>221
https://www.compart.com/en/unicode/search?q=math#blocks
なんか抜けているのあったっけ?

Arrowをmath専用にして欲しいとか?
https://www.compart.com/en/unicode/search?q=arrow#blocks

225 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 20:38:05.02 ID:MbA5frdV.net]
>>214
std::set s(std::initializer_list<T>{}, [](T x, T y){return x < y;});
とかどうやろ

226 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 20:50:59.39 ID:rnInpLg+.net]
>>215
ありがとう
悲しい
>>217
比較関数って内部でめちゃくちゃ呼ばれるんでパフォーマンスが気になっちゃう
>>223
なるほどTも推論させればいいのか
トリッキーだけど一番思ってたのに近いかも、ありがとう

227 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 23:20:50.87 ID:kbM6t4K6.net]
C++20なら、こんな書き方はできる
std::set<T, decltype([](T x, T y) { return x < y; })> s;

https://cpprefjp.github.io/lang/cpp20/default_constructible_and_assignable_stateless_lambdas.html

228 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 09:34:11.45 ID:nrpyYaDv.net]
(float) std::sin(3.14);
これの三角関数の左の(float)ってどういう意味ですか??

229 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 09:47:34.80 ID:s0V2liBt.net]
キャストでぐぐれ

230 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 11:30:58.25 ID:nrpyYaDv.net]
あなるほど
C形式のキャストでdoubleからfloatに変換してるんですね

231 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 12:19:36.79 ID:ZXOJuLfE.net]
× C形式
○ キャスト記法

232 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 18:20:14.63 ID:jjkrjYLo.net]
C形式のキャストでええやろ
C++ならstatic_castでキャストするべきところ



233 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 18:26:41.52 ID:BgqX0HXa.net]
精度がfloatでいいならsinf使え

234 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 19:23:24.64 ID:ZXOJuLfE.net]
>>230
いや、そうではなくJIS規格で定められた用語ってこと

・・・まあね、フレンドが随伴とかちょっと・・・なところあるんだけど

235 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 20:16:51.63 ID:DeLDBVlq.net]
いまだに用語警察っているんだなw

236 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 20:29:45.29 ID:jjkrjYLo.net]
C++11以降にJIS規格は存在しないし, ぶっちゃけ本当に誰もキャスト形式なんて呼んでないし (T) cast-expression とさえ呼ばれない。
C++ Core GuidelinesやgccやclangでもC-style(やold-style)と表現しているのだからそんな古臭い分かりにくい用語を押し付ける必然性がない

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-cstylecast

237 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 20:34:58.49 ID:CHJdF2OL.net]
用語の間違いで意味の取り違えが起きるような場面ならはっきりさせておくべきだが今回はどうでもいいな。

238 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 07:47:05.01 ID:g0v08EwR.net]
>>234
キャスト形式?
何に対する意見を言っているんだ?

239 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 08:09:01.81 ID:3cd7zaNc.net]
また下らん揚げ足取り君が来たw

240 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 18:36:58.89 ID:g0v08EwR.net]
揚げ足じゃねえよ
話の根幹に拘わることだ

まともに反駁できないなら
黙っているのが得策だぞ

241 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 21:16:52.28 ID:dR0HZDjS.net]
訂正の益があったとしても(今回は全くなさそうだが)用語警察は不要
書き込みの意味が文脈から一意であれば問題ない
黙ってろ

242 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 21:23:49.13 ID:XPddKxbx.net]
constructorとdestructorを常に生成子・消去子と呼んでる者だけがJIS規格を振り回しなさい



243 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 22:13:15.88 ID:Zqmej2qN.net]
オレ用語を高圧的な態度で押しつけてくるやつとは仕事したくねえ

244 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 00:15:41.50 ID:35fMaRJu.net]
>>219
今から考えれば NECのPC-8801 のBASIC言語は数学好きに合っていた。
当時のNECの社長は、東大物理の大学院出の人だったらしい。
その人がTOPにいる間はNECのパソコンは日本で一斉を風靡していたが、
その人が降りてからは、嘘の様に勢いがなくなった。

245 名前:デフォルトの名無しさん [2021/12/07(火) 13:20:30.29 ID:XtC4oDEh.net]
みんなコルーチン使ってる?

246 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 13:44:30.14 ID:bN2QwYhk.net]
コルーチンはいろいろ制限が多くてな、最近はfiberの方を使ってる
機種依存APIを使う必要がある、実行効率が若干落ちる、スタック用のメモリを大量消費する、トレースデバッグがやりづらい等のデメリットはあるが、
本物のyieldはやっぱ便利よ

247 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 14:37:49.13 ID:RTlriAYU.net]
c+のvectorって無限に要素追加したらどうなりますか?
例えばwhile (1) でemplace_back()し続けた時の挙動です。javaみたいにちゃんとoutofmemoryエラー吐くようにできてますか?

248 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 14:52:13.72 ID:N5mK0FmF.net]
「ちゃんとout of memoryエラーを吐く」というのは突き詰めるとものすごく難しい概念なので、どこまでを求めるかによる
Javaにしても本当にどのレベルまで正しくやれてるのかは知らん
まあ「なんかあったらstd::bad_alloc投げて来るやろ」で99%のケースは事足りると思うけど

249 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 14:57:50.91 ID:xk7e4Rn1.net]
例えば普通のアプリだと、C++とか関係なく最近のOSのメモリ確保は仮想メモリの確保なので、実際にそのアドレスが使われて初めて物理アドレスが確保され、スワップ領域が足りない場合もそのとき検出される。

250 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 14:57:56.04 ID:Z6YBtzSC.net]
mallocに失敗すればbad_allocが投げられるが
実際のところmallocが失敗するときにできることは殆ど無いと認識している

251 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 15:01:16.11 ID:i9OSA5UU.net]
>>179
そもそも C++ から Fortran で書かれてるオリジナルの BLAS とか LAPACK を呼ぶこともできるのだから、その辺は別に何でも良い

そんなことよりも多次元配列をどう持つかの方が C++ にとっては難しい課題だ
Cの多次元配列や一次元配列として持つのはユーザ側の負担が大き過ぎる
boost の multi_array は放置されている (move セマンティクスに対応してすらない)
xtensor みたいなサードパーティのものをわざわざ使うのも…… (つーかどれもパッとしない)
早く多次元配列くらい公式で用意してほしい

252 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 15:42:17.22 ID:bN4twrqH.net]
多次元といっても中身掛け算の一次元だしな



253 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 16:20:01.36 ID:m1NjLpbT.net]
class foo : vector<mystruct>
みたいなクラスを作っているんだけど
クラス内の関数で自身の配列の構造体の関数を呼ぶにはどうしたらいいんだろう?

this[a]->set(0);
と書いてもメンバーがありませんと出て困ってます😭

254 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 16:24:10.42 ID:bN4twrqH.net]
(*this)[a]->set(0);

255 名前:デフォルトの名無しさん [2021/12/07(火) 16:32:15.84 ID:m1NjLpbT.net]
>>252
ありがとう!ちょっと直したけど
(*this)[a].set(0);
でできました、超助かりました!チュッ!

256 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 17:48:46.48 ID:D9y2bkeI.net]
そういうときはat()使ってる

257 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 18:03:51.96 ID:bN4twrqH.net]
atは範囲チェック分鈍くなるの我慢出来るなら有
あと例外飛ばすからtry〜catch節必須

258 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 20:03:22.82 ID:CgArR1cc.net]
>>248
bad_alloc is not out-of-memory!
https://wg21.link/P1401

259 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 21:29:05.30 ID:C8BO015l.net]
std::vectorのデストラクタはvirtualじゃないから気を付けてね、念のため

260 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 22:45:19.35 ID:eXh2WItM.net]
abort()したら生きている自動オブジェクトは
どうなってし
まいますの?

261 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 00:17:43.36 ID:19ueGHR5.net]
#include <iostream>
#include <cstdlib>
using namespace std;
struct s {
~s() {cout << "called." << endl;}
};
int main() {
s a;
abort();
return 0;
}
https://ideone.com/YDdO5O
https://cpprefjp.github.io/reference/cstdlib/abort.html

262 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 00:51:11.41 ID:x9fXkANc.net]
abortより例外飛ばした方が確実だな(VC++6.0を除く



263 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 07:27:41.53 ID:HL2646/9.net]
>>258
デストラクタは実行されない
問答無用で強制終了
電源ぶっちするようなもん

264 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 07:58:51.26 ID:ZH5V4J5Q.net]
多次元配列 (mdspanだっけ) ってまだSTLに入らんの?
線形代数アルゴリズムはBLAS、LAPACKはじめ外部のライブラリに頼らざるを得ないんだから、最小限の機能だけ備えた取り回しの良いライブラリをさっさと入れちゃえば良いのに

この機械学習全盛の時代に置いてかれるよね

265 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 10:00:58.02 ID:19ueGHR5.net]
機械学習全盛なの?

266 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 13:49:53.98 ID:juXg17Zg.net]
ああいうライブラリってプラットフォームにべったり依存してるんじゃないの

267 名前:デフォルトの名無しさん [2021/12/08(水) 13:51:20.15 ID:ADK1Cn8m.net]
GoogleのGPUがオンラインで無料でつかえるぞ
Python言語だが

268 名前:デフォルトの名無しさん [2021/12/08(水) 13:56:11.42 ID:ADK1Cn8m.net]
C言語とかローカルの言語からGoogleのGPUを操作できれば
ローカルで実行してるのと大差なくできると今おもったが
探せばすでにそういったAPIとかある気はしたが

269 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 14:21:17.05 ID:19ueGHR5.net]
スレ違い。
Google Colaboratoryはjupyter notebook使えればいいだけ。
!や%%で大抵のことは出来る。

270 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 16:19:48.22 ID:ZH5V4J5Q.net]
>>264
どういうライブラリ?

271 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 00:00:00.18 ID:y//gPIop.net]
>>260
例外飛ばしたら今度はCの関数が処理の途中でぶっちされるやん……?
次のような場合:
foo() // C++で記述、例外をスロー

bar() // Cで記述、ループ内とかでfoo()を呼ぶ

baz() // C/C++で書かれた呼び出し元

272 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 01:16:56.11 ID:nwscR4Pq.net]
構造体を関数の中で宣言して戻り値に入れたら
呼び出した側が受け取った値はどこかで開放しないといけないですか?



273 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 01:43:46.28 ID:9kW8IukA.net]
なんで最近こんな無茶苦茶なの?
>>269
質問は「生きている自動オブジェクト」がどうなるかであり、例外でスコープから抜ければC/C++だろうと破棄される
>>270
「関数の中で宣言」とはどういうこと?
「受け取った値」はどうやって確保されたの?
ちゃんと伝えられないならコードで質問しないと伝わらない

274 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 07:16:10.87 ID:Gl3ymjyg.net]
>>270
要らない
構造体はintなんかと同じでコピーされるから []
[ここ壊れてます]

276 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 09:45:40.72 ID:nwscR4Pq.net]
>>272 >>271
ありがとう!助かりました

C#でGC慣れしているので
正直この辺はなかなか理解が進まなくて…
ESP32が面白くてC++を始めたんだけど
いざ自分であれこれ作ろうとすると
わからない部分が多すぎて申し訳ない

277 名前:はちみつ餃子 mailto:sage [2021/12/09(木) 10:43:53.70 ID:XwSSuf4e.net]
そこらへんのメカニズムはどんな入門書にでも書いてあるはずだよ。
C# の経験があると C++ の入門書では重複する考え方も多くて馬鹿らしく思うかもしれないけど、
似て非なる機能や用語で混乱しないためには基礎から学んだほうがいい。

278 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 11:33:51.67 ID:WBF8gVdC.net]
newを知っててもdelete知らなかったりするからな

279 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 11:45:45.22 ID:kWV4UehO.net]
そこらじゅうにうんこをばらまいておいて誰かが始末してくれると信じているというわけか

280 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 12:14:01.37 ID:WBF8gVdC.net]
やつらメモリーリークという言葉自体知らなかったりするから

281 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 17:58:28.95 ID:0JFBEVvg.net]
GC言語でもファイルのcloseはあるから
C++はメモリもあれと同じでnewした物は全部責任持ってdeleteしなきゃならないんだよって教えるんだけど
みんなこの世の終わりみたいな顔する

282 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 18:13:01.83 ID:jWh05eno.net]
>>275
w



283 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 20:34:39.79 ID:XclkFwFR.net]
おまいら「よう、うんこ掃除屋」
unique_ptr「…」


10年後、人類はAIの反乱で滅亡するのでした

284 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 21:19:33.80 ID:JHQQMY8Y.net]
コンピューターの計算だから正しいっ!!

285 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 23:56:02.90 ID:y//gPIop.net]
>>271
Cのは
破棄されない

286 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 23:59:22.21 ID:9kW8IukA.net]
>>282
Cで書かれてるならデストラクタなどはないのでメモリ解放で破棄

287 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 23:59:43.06 ID:y//gPIop.net]
Cの構造体はunwindされずただぶっちされるだけ
コードの実行がぶっちされるのはC/C++共通う

288 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 00:07:01.17 ID:4mUmJ7za.net]
自身を適切に開放なり後始末なりするデストラクタを持たないオブジェクトは例外でほぼ等しく致命傷を負う
そういうデストラクタを持っているつもりでも、コードの実行順がぶっちされることにより、
プログラマーの不注意ですぐ致命傷を負う

289 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 00:28:44.05 ID:G7csYfUf.net]
cat >sample_cpp.cpp <<EOF
#include <iostream>
using namespace std;
struct s {
~s() {cout << "called." << endl;}
};
void func1() {
s a;
throw "hoge";
}
extern "C" void func2(void(*)());
int main() {
s a;
try {
func2(func1);
}
catch(const char* m) {
cout << m << endl;
}
return 0;
}
EOF
cat >sample_c.c <<EOF
struct s {
int dummy;
};
void func2(void (*f)()) {
struct s a;
f();
}
EOF

290 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 00:29:59.22 ID:G7csYfUf.net]
gcc -g -c sample_c.c
g++ -Wall -g -c sample_cpp.cpp
g++ sample_c.o sample_cpp.o -o sample
./sample

実行結果
called.
hoge
called.

>>284-285
Cにはデストラクタがないので、メモリが開放されればOKであり、自動的に開放される
C++ではスコープから外れればデストラクタが呼ばれた後にメモリが開放される

291 名前:はちみつ餃子 mailto:sage [2021/12/10(金) 01:18:14.66 ID:ogq0Brkp.net]
JavaScript でリソースを解放 (GC で回収) するために
変数に false を代入して参照を切っているのを見たことが有って、
GC があってもこの手のバッドノウハウは要るんだなと思いました。 (小並感)

292 名前:デフォルトの名無しさん [2021/12/10(金) 01:52:31.83 ID:eLt0CNh3.net]
GCが正常に機能しているという保証がそもそもないから
そもそも何が正常な動作なのかを誰も責任とらない架空の権威によって成り立っている



293 名前:はちみつ餃子 mailto:sage [2021/12/10(金) 01:58:44.76 ID:ogq0Brkp.net]
メモリ回収のタイミングが保証されないのは大した問題ではない
(プロセスが終了すればどうせ回収されるので)
のだが、外部のリソースを掴んでいるときに後始末されないかもしれないのは困るな。

294 名前:デフォルトの名無しさん [2021/12/10(金) 02:33:47.50 ID:eLt0CNh3.net]
Windows10でコマンドプロンプトのGUIを提供するconhost.exeはナウくてヤングなC++のstd::basic_string_viewを使っている
Windows2000以来のconhost.exeが古いコードのままメンテ放置されているわけではないことがわかり少しだけほっこりする
以下、それらしきシンボル
TextBuffer::InsertCharacter(class std::basic_string_view<unsigned short,struct std::char_traits<unsigned short> >,class DbcsAttribute,class TextAttribute)


ま、本当はなにをしたかったというとpwsh.exeとconhost.exeが道連れクラッシュして困ってるってだけなんだが

295 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 05:50:56.28 ID:iiZD81ri.net]
多人数のプロジェクトほどuniqueではなくshard_ptrが増えるのはトラブった時に誰も責任取らなくていいからって事?

296 名前:デフォルトの名無しさん [2021/12/10(金) 07:04:02.57 ID:eLt0CNh3.net]
shared_ptrを乱用する職業PGよりもweak_ptrを使いこなせる厨二PGたれ
主従関係がある場合、主が従のシェアポを持ち、従が主のウイポを持て

297 名前:デフォルトの名無しさん [2021/12/10(金) 07:11:56.68 ID:eLt0CNh3.net]
多くの職業PGは依存関係を親子関係で騙りたがるが、
生物学上、親は子より先に生まれ先に死ぬのだから、FIFOは成り立つがLIFOは成り立たない
ポリコレ的にはマスター/スレーブではなくプライマリ/セカンダリが望ましいとされる
ルー語の乱用をさけるならばプライマリ/セカンダリではなく主/従がなお良い
よって依存関係を主従関係で騙るのが正しい
織豊政権のように、主君の死後に従者が取って代わった例もあるから完全ではないが

298 名前:デフォルトの名無しさん [2021/12/10(金) 07:15:52.21 ID:eLt0CNh3.net]
秀吉は主君信長のweak_ptrを持っていたので本能寺の変での主君の横死を的確に知ることができた

299 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 07:35:10.03 ID:WKa1d5RR.net]
くだらねえ
喩え話なのはみんなわかってんのに
覚えたての日本語ひけらかしてドヤるな

300 名前:デフォルトの名無しさん [2021/12/10(金) 08:04:47.84 ID:eLt0CNh3.net]
ルー語の乱用を避けるのが礼儀だぞ

301 名前:デフォルトの名無しさん [2021/12/10(金) 08:16:32.12 ID:Qqc0ky4z.net]
>>290
そうなんだよね
リソース解放のタイミングが保証されないのは言語設計のミスだった
JavaではファイルやソケットなどのリソースはGCのときに呼ばれるfinalizeで解放すればいいよって思想だったけど
いつfinalizeが呼ばれるのか予測できないことに起因するバグが多発
ついにfinalizeが廃止されることになった

リソースは自前で廃棄してねというスタンス
GCも当初の期待ほどうまくいってない

302 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 09:48:13.03 ID:IPFkCC9z.net]
ファイルやソケットの開放はcloseないしデストラクタでやるのだから保証されてるぞ?
保証されないのはメモリリソースだけ

あとjavaも当初からfinalizeが呼ばれることは保証されてなかったからfinalizeで開放しなさいなんていう慣習はなかったと思うが



303 名前:デフォルトの名無しさん [2021/12/10(金) 10:14:08.92 ID:eLt0CNh3.net]
JavaはJDBC周りのGCの挙動が厄介だYO
GC性善説に立つと痛い目にあう

304 名前:デフォルトの名無しさん [2021/12/10(金) 11:20:58.79 ID:Qqc0ky4z.net]
>>299
JavaやC#にはデストラクタないからね
C++経験者がJavaやC#ではファイナライザーを使ったりしてたんだよ
C#ではマイクロソフト謹製標準ライブラリでさえファイナライザーでファイルを閉じるクソコードがある

305 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 11:32:06.75 ID:G7csYfUf.net]
いつまでスレ違いの話続けんの?間違いの指摘すら面倒

306 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 11:49:22.35 ID:/d3oGHTa.net]
C#はファイナライザで解放でいいんだよ
Disposeパターンがそういうスタイルだから

307 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 11:51:44.78 ID:IPFkCC9z.net]
>>301
それはその個人が不勉強なだけだろ…
finalizeが呼ばれないことがあるのはあまりに初歩的なチップスで、初級でない一般的なJavaプログラマがfinalizeだけでリソース開放するとかありえない。
思想って誰の思想?

メモリ解放に気を使わないC/C++プログラマがいないのと同じ

308 名前:デフォルトの名無しさん [2021/12/10(金) 12:27:48.66 ID:Qqc0ky4z.net]
>>304
その不勉強な個人が多すぎたんでしょ
デストラクタの代わりにファイナライザーを使う誤用が多かった
finalize廃止を決断しなければならないほどにね

309 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 12:36:42.08 ID:WKa1d5RR.net]
C++の轍を踏まないはずが
ざまあねえな

310 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 12:43:00.40 ID:iN+TjAqi.net]
>>ID:Qqc0ky4z
>>298
>JavaではファイルやソケットなどのリソースはGCのときに呼ばれるfinalizeで解放すればいいよって思想だったけど
>>301
>C#ではマイクロソフト謹製標準ライブラリでさえファイナライザーでファイルを閉じるクソコードがある
>>305
>その不勉強な個人が多すぎたんでしょ
上記発言を見ればあなたが不勉強なのはわかったよ

311 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 16:09:36.14 ID:nNdO4jXs.net]
vectorのaが空じゃないと思い込んでて実は空の状態で
for (int i =0; i < a.size()-1; i++)
これやると一瞬でオワるのなんとかならないかな
まあ普通はa.sizeをintやらでキャスりましょーって話だとは思うけど
そもそもsizeの型がuなのが悪いと思うんだが
uじゃなきゃ足りないくらいの要素数確保することなんてあんのか?ぁん?

312 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 16:21:05.76 ID:UbGkGPEB.net]
i+1<a.size()



313 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 16:24:59.62 ID:4aSHek6G.net]
または、if(!a.empty()) for(...)

314 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 16:26:11.66 ID:nNdO4jXs.net]
>>309
てんさいかよ

315 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 16:40:04.25 ID:UbGkGPEB.net]
C++20にはstd::ssize()もあるぞ

316 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 16:46:05.19 ID:PJTDipJe.net]
i <= a.size()-1じゃなくて i < a.size()-1?

317 名前:デフォルトの名無しさん [2021/12/10(金) 16:54:00.86 ID:eLt0CNh3.net]
以下のような直感的でベタな条件式のほうがいいと思うよ
for (int i =0; a.size() > 0 && i < a.size()-1; i++)

318 名前:デフォルトの名無しさん [2021/12/10(金) 16:56:40.50 ID:eLt0CNh3.net]
一見すると小学生の書いた作文っぽく見えるコードが結局のところ一番良い
厨二を拗らせたような難解なコードは避けよう

319 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 16:58:49.17 ID:UbGkGPEB.net]
このループ内でa[i]とa[i+1]を使ってなんかするんだろ
a[i+1]が有効なインデックスか?という条件がi+1<a.size()でこれは自然

320 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 17:19:52.62 ID:PJTDipJe.net]
ああ、それなら納得

321 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 17:20:02.15 ID:qnyfSMbx.net]
なんで-1してるの?

322 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 18:23:30.43 ID:31VztrOJ.net]
出典忘れたけどsizeが符号無しなのは標準委員会も失敗だったと考えてるらしい(?)



323 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 20:12:16.24 ID:AEk60g9j.net]
まあ、そうでなきゃssize_tなんて恥ずかしいもの後付けしたりしないし

324 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 20:26:39.77 ID:4aSHek6G.net]
>>314
二回余計な比較にクロックを喰われる

325 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 21:01:58.48 ID:G7csYfUf.net]
最近このスレやばない?
intじゃなくてstd::vector<...>::size_typeでいい
>>310は明らかに間違ってる
1引くケースは大抵サイズ2以上がよくある事前条件なので普通事前に弾く
ループ内や別スレッドでvectorが変更されないケースならループの外で1引いた方が速い
今回ssize_tは無関係

326 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 21:13:20.54 ID:4aSHek6G.net]
>>322
どこがヤバイの?
普通に動くし

327 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 21:27:52.13 ID:G7csYfUf.net]
>>323
列挙したところ。普通にレベルがやばい。
>>310はwhile(!a.empty())と書いてるのかと思ってたので俺の勘違い。
何が普通に動くの?

328 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 21:33:24.42 ID:4aSHek6G.net]
>>324
いや、間違えてるとか言われてたからな
頭の中で動かしてみて問題なく普通に動くだろうと
ってなんでお前そんなにエラそうなの?エラが張ってる民族か?

329 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 22:00:02.92 ID:G7csYfUf.net]
>>325
聞かれたから答えたけど会話にならんな・・・この辺で

330 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 22:00:16.81 ID:caXqow3a.net]
どうしたらいいかご意見を聞かせてください!٩( ᐛ )و

class hogeにおいてメンバ変数unique_ptr<toge>toge1を所有しております。
vector<hoge> vHogeを運用するとき、hogeのインスタンスをプッシュバックしようとすると、削除された関数ですというエラーメッセージが帰ってまいります。
おそらくtoge1がユニークポインタであり、ムーブ以外の移動が不可能だからだと思うのですが……このままプッシュバックさせるのに何か方法はありますでしょうか?

健作でtoge1にshared_ptrを使う、hogeのコピーコンストラクタにmemcpyを使う等の解を見つけました。
私ごとですが、shared_ptrは循環参照で失敗した哀しい過去があり、恐怖感があります。
またmemcpyでユニークポインタをメモリコピーする場合の機序がイマイチわかりません……
ムーブを経由させずにどうやってユニークポインタを再確保出来る証拠でしょうか……?

どちらの方法でも、実行する場合の注意点があればなんでも教えていただければ幸いです(^O^)/
また上記以外の方法も、もし存在するならば教えていただけると嬉しいです(´;ω;`)

先にお礼申し上げます。ありがとうございます。

331 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 22:05:57.88 ID:4aSHek6G.net]
>>326
もとはといえオメェが勘違いしたからだろこのヒトモドキが

332 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 22:09:42.92 ID:G7csYfUf.net]
>>327
再現コードをどこかに貼って。伝わらない。
>>328
煽ってるだけじゃんw だから会話にならないんだよw



333 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 22:20:49.71 ID:Yfltgwdt.net]
>>322
普通事前に弾くとかドヤ顔で言われてもそんなの200も承知の助なんだよ
ああいう不測な組み方で死にかねない爆弾抱えるデメリットに比べたら
unsignedなことによるメリットなんて実質ほぼないカスみたいなもんだからsizeがunsignedなのは設計ミスではって話

334 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 22:23:19.44 ID:caXqow3a.net]
申し訳ございません( ✌︎'ω')✌︎
遅れましたがこれです。
プッシュバックでエラーががが

struct Toge{
int a=0;
};
struct hoge {
std::unique_ptr<toge> toge1;
};

int main ()
{
std::vector<hoge> vHoge;
hoge hoge001;
vHoge.push_back(hoge001);
}

335 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 22:24:50.14 ID:caXqow3a.net]
大文字になってしまった……
struct Toge >>> struct toge
と思っていただければ……

336 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 22:34:31.10 ID:iN+TjAqi.net]
vHoge.push_back(std::move(hoge001));

337 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 22:36:13.76 ID:AEk60g9j.net]
vectorに突っ込んだらもうhoge001は使わないんだったらvHoge.push_back(std::move(hoge001));

コピーさせたいならhogeにこんなコピコンとコピop=を定義しとけばいい
hoge(const hoge& other) : toge1(new toge(*other.toge1)){}
基本はmoveだけど時々コピーもしたいくらいなら特殊関数じゃなくてclone()みたいな関数にしておく
どれがいいかは本当の用途と目的で選んで

338 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 22:37:31.61 ID:G7csYfUf.net]
>>332
コンパイルエラーを直してください
https://ideone.com/RxQYii

>>330
承知してるなら弾け
今回の用件はsize_type使えばいいだけなのでunsignedかどうかは関係ない

339 名前:はちみつ餃子 mailto:sage [2021/12/10(金) 22:52:51.98 ID:ogq0Brkp.net]
>>327
> hogeのコピーコンストラクタにmemcpyを使う等の解

これについてはダメ。
設計上の話ではなく言語仕様での保証がない。
そんなのがまかり通ったらスマートポインタの意味がない。

型が trivially copyable の要件を満たすときだけ memcpy でのコピーが許されている。

340 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 23:02:05.91 ID:4aSHek6G.net]
>>335
オメェが直して差し上げろよ
本人それで困ってんだからよ

341 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 23:18:01.33 ID:G7csYfUf.net]
>>337
なんだか煽ってばかりですね。質問内容は明快にしないといけないので。

342 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 23:22:36.91 ID:4aSHek6G.net]
ああ言えば上裕
オメェそっくり



343 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 23:40:14.88 ID:Yfltgwdt.net]
>>335
いや関係大ありだから
ないって言い張るならsizeがunsignedなメリット挙げてみなよ、ないでしょ

344 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 23:41:07.01 ID:caXqow3a.net]
>>333
>>334
お風呂に入っており返信が遅くなりました。
なんてお礼を言ったらいいか、std::moveで解決しました。
自分の知識不足ではありますが、素早い返信に感謝でございます(〃ω〃)
生成したユニークポインタはベクターに移せれば使い捨てのでムーブで良さそうです。
std::moveについて調べてみます!

>>336
ありがとうございます。
メモコピーで解決するというページがあったのですが、正直機序がわからず不安でした(笑)
シェアードポインタかムーブで対応したいと思います。
有難うございました。

345 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 23:49:32.55 ID:aT/chChl.net]
>>308
普通は範囲forじゃないの?
性能とかで差分あったっけ。

346 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 23:57:06.57 ID:G7csYfUf.net]
>>340
関係ないでしょw vectorの要素指定に必要な型はsize_typeだからw

347 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 00:02:57.69 ID:3H+eghbz.net]
>>343
ふ〜ん、で?
sizeがunsignedなメリット挙げれるの?挙げれないの?

348 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 00:09:02.31 ID:VVJ2blgW.net]
>>344
同じ人かなw 最初から最後まで関係ないとしか言ってないよw 関係ない話をする意味はないw

349 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 00:11:05.65 ID:3H+eghbz.net]
はい逃げたねお疲れさまー
てかまあこんな頭の固いジジイ追い詰めなくても
>>319-320あたりで結論出てるからもういいんだけどね
sizeも漏れなく頭の固いクソジジイが設計ミスしたんだろうなぁ
間違いを認められるだけコイツよりまだマシだけど

350 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 00:13:11.51 ID:3H+eghbz.net]
わいも寝るんで逃げさせてもらうわ、ほな

351 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 00:13:27.97 ID:VVJ2blgW.net]
>>346
煽るだけで根拠も出せてない無関係な話をしてるのはそっちでしょw 話が終わらなくなるなら普通はしないw
頭が硬いのは君だよw

352 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 02:16:25.58 ID:heMahnZy.net]
>>341
もう見てないだろうけど、>>331のケースだと
わざわざstd::move()で右辺値にキャストしなくても
vHoge.push_back(hoge());
で良いと思う。
hoge hoge001;とするから左辺値になってしまってstd::move()が必要になるけど、
引数で直接hoge()とすれば右辺値だからstd::move()しなくても右辺値参照のpush_backが呼ばれるはず。



353 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 03:09:07.14 ID:fJKHaMXl.net]
emplace_backっていつ使うんだっけ?

354 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 03:48:00.02 ID:heMahnZy.net]
>>350
今でしょ・・・
>>349なんてしなくても
vHoge.emplace_back();
で良い話だった。

355 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 08:31:56.16 ID:iPxJ8RPT.net]
>>349
ありがとうございます!
エンプレイスバックでも確認できました。

本当に根本がわかってなかったにでお恥ずかしい話ですが、ユニークポインタはmove出来ることは知っていても、インスタンスごとmoveするという考えに至りませんでした。
右辺値の言葉だけは知っていた状態です……
moveが引数の領域を右辺値に変換するので、インスタンスのメンバ全てが一時的に右辺地に変換され、その結果ユニークポインタの移動も許可されるという考えで良いのですかね?

皆様ありがとうございます

356 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 08:39:15.08 ID:RT/36Bm9.net]
gccのヘッダファイル見るとpush_backがemplace_backに置き換えられてた

357 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 11:16:33.01 ID:VVJ2blgW.net]
質問する方はそもそも何を知りたいのか、どうしたいのかを明確にせず
回答する方はよく分からずに回答してる感じだな(はちみつ餃子以外)

358 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 11:28:49.13 ID:XUdPn4EW.net]
本人じゃないとありえんようなクソレス

359 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 11:33:31.35 ID:VVJ2blgW.net]
俺ははちみつ餃子じゃないよ
分かってる人は全員そう思うと思う
このスレやばい

360 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 11:40:28.86 ID:2RxEeijy.net]
>>354
おまえさんの対話力が、ここの平均以下ってことだな
僅かなエスパーもできないアスペっぽいやつが
取り残されるのは仕方のないことだ

361 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 11:41:55.96 ID:2RxEeijy.net]
ここをサポセンか何かと勘違いしてね?

362 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 11:43:35.03 ID:2RxEeijy.net]
上司や客に言われたことを自分も誰かに言いたいのかな



363 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 11:53:10.78 ID:VVJ2blgW.net]
>>357-359
3連投しないで1つにまとめてね

伝わらない人がいるのでハッキリ言うと、、、
質問したい人はもう少し明確に質問してほしい
回答する人はもう少し正確な回答をしてほしい

現在このスレのレベルはかなり落ちている

364 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 12:03:14.48 ID:2RxEeijy.net]
>>360
あんたに連投がどうのと指図される筋合いはないし
質問者がどうして欲しい
回答者がどうして欲しい
と、やたら依頼心の強いやつだな

頼み事をする態度を知らんのか

365 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 12:04:22.50 ID:8GY5wY3L.net]
僕だけは特別!

366 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 12:08:44.64 ID:VVJ2blgW.net]
>>361-362
見るに堪えないだけだよ。当たり前のことを要求してるだけだし、ID変えてまで一体何が気に障るのやら・・・

367 名前:デフォルトの名無しさん [2021/12/11(土) 12:14:57.20 ID:fJKHaMXl.net]
簡単なコードが提示できないんだけどコンセプトで以下のようなエラーがでる

> C7608: アトミック制約は定数式である必要があります 。

アトミック制約ってなに?

368 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 12:19:25.86 ID:1jb/pqqq.net]
1つの内容を理由もなく複数のレスに分けて投稿する奴はもれなくバカなのでスルー推奨

369 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 12:23:49.93 ID:VVJ2blgW.net]
>>364
C++20はまだやる気ないので知らないけど、仕様は以下みたい。参考まで。
https://timsong-cpp.github.io/cppwp/n4861/temp.constr.constr#temp.constr.atomic

370 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 13:18:37.47 ID:iDGs+tOs.net]
多分atomic は、OS に割り込まれない、interrupt disable みたいな奴だろ。
割り込み禁止区間

1. 割り込み禁止
2. atomic に処理したいもの
3. 割り込み許可

371 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 13:41:40.82 ID:MUPeoDuy.net]
>>367
それはリアルモードOSでの話
最近の OS ではユーザーが OS の企みを阻止することは不可能

372 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 13:49:58.55 ID:VVJ2blgW.net]
無関係でスレ違いかつ「内容まで間違った」ことを垂れ流し続けるのはやめてくれ



373 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 15:00:10.16 ID:U6KjSVaU.net]
一般にアトミックと割り込み禁止は異なる概念、
マルチコアのアーキテクチャーなら割り込みを禁止したからといって
複数回のバスサイクルをアトミックに遂行できるとは限らない

つなみに割り込み禁止という手段でOSに割り込まれないことは実現はできるが
強力すぎるので普通はそれはしない
やったらリアルタイムOSならリアルタイム性の前提が根底から覆るし、
非リアルタイムOSでも割り込み禁止したタスクAとは本来無関係(独立に実行して良い)なタスクまで
プリエンプション停止によって止まってしまう弊害があるから

374 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 15:12:24.61 ID:U6KjSVaU.net]
リードモディファイライトぐらいなら今日日のCPUが命令を備えているのでOSにも対応するAPIがあり、
それを実行したらリード、ライト、リードの3バスサイクルがアトミックに実行される
もっと凝った処理をアトミックにしたい場合は

1. クリティカルセクション(セマフォとかでも良い)にENTER
2. atomic に処理したいもの
3. クリティカルセクション(セマフォとかでも良い)からLEAVE

となり、1と3はやはりOSにお世話いただく

375 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 15:16:22.95 ID:xxQzv6uY.net]
>>363
出た、当たり前のことを要求だとよ
自分の要求は通って当たり前と思っている真性のやつw

376 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 15:18:53.32 ID:MUPeoDuy.net]
>>371
クリティカルセクションとイベントを使って書いていたことがありましたが、スタベーションに悩まされて止めてしまいました…

377 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 15:26:46.48 ID:U6KjSVaU.net]
>>373
なんでatomicに処理するごときでイベントが出てくるのかわからん……
1で待っているタスクBが居るなら、アトミックな処理を終えたタスクAが3を実行した時点で
OSがタスクBに自動的に通知する(ていうか起こす
不必要に凝りまくった(そして間違った)排他制御をしているのではないか、

378 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 16:00:21.52 ID:9bOVK1ul.net]
セマフォでも大丈夫なん?

379 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 16:48:16.25 ID:VVJ2blgW.net]
U6KjSVaUだけまともだけど、CriticalSectionが同期機構として存在するのはWindowsだけ
アトミック制約と無関係でC++固有でもないのでスレ違いなのは同じだけど…その辺の話をするならせめて↓でしてくれ

標準C++で単にatomicな話なら
https://cpprefjp.github.io/reference.html#atomic-operations
標準C++でスレッドを対象とした話なら
https://cpprefjp.github.io/reference.html#thread-support
プロセスまで含むならboostになるけど
https://www.boost.org/doc/libs/1_78_0/doc/html/interprocess.html

380 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 17:02:39.01 ID:y3N81+jA.net]
>>376
迷惑なんでコテハンにしていただけません?

381 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 17:06:37.77 ID:VVJ2blgW.net]
何が迷惑なのか理由の説明がないが、コテハン付けたいならお前だけ勝手につけとけw

382 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 17:13:56.24 ID:VjmhXzGH.net]
template <typename T, typename Allocator = std::allocator<T>>
using vec = std::vector<T, Allocator>;

auto v = vec(0, 0);

ってgccだと動いてclangだとコンパイル通らないけどclangのバグ?



383 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 17:17:46.16 ID:9bOVK1ul.net]
勘違いしてた
セマフォでも一人に限定すれば問題ないか

384 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 17:36:33.78 ID:gcR9gZtv.n ]
[ここ壊れてます]

385 名前:et mailto: そもそもそもそも

アトミック制約って原子制約のことでしょう
排他制御のatomicとは全く無関係に

単にconstexprじゃないbool値をrequiresしてませんか?
[]
[ここ壊れてます]

386 名前:はちみつ餃子 mailto:sage [2021/12/11(土) 17:38:45.13 ID:kyD4TLbr.net]
>>379
バグというか C++20 対応が不十分なんだと思う。

@ 元々は実引数から型引数にあてはまる型を推論するのは関数テンプレート (メンバ関数テンプレートを含む) でしか出来なかった
A C++17 コンストラクタの実引数からクラスの型引数を推論できるようになった
B C++20 からエイリアステンプレートを挟んでも推論できるようになった ← これがまだ出来ない

387 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 18:22:11.20 ID:fJKHaMXl.net]
>>381
たしかにこれの最初のサンプルのdraw関数みたいな事をrequiresしてる。
https://cpprefjp.github.io/lang/cpp20/concepts.html
ただ上で言うdraw関数はconstexprなんだけどな・・・

388 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 20:57:07.56 ID:VjmhXzGH.net]
>>382
わかりやすかったありがとう
まだmake_hogeみたいな不格好なヘルパ関数が役に立つこともあるのね

389 名前:デフォルトの名無しさん [2021/12/12(日) 02:33:53.10 ID:ECuL7aut.net]
NFTアートとNFTゲームとGameFiとブロックチェーンゲームに
提供する側・作る側として参入しよう。
(むりなら参加する側でもいい)
DAOとPlay-to-Earn(遊んで稼ぐ)が世界の未来になる

390 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 09:13:16.08 ID:2ZUu/eca.net]
C#で作成されたDLLってC++で呼び出せないんでしたっけ?

391 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 10:05:57.23 ID:Rei0r571.net]
>>386
やってみれば?何をしてみたの?

392 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 12:59:03.03 ID:kKgLRxlD.net]
>>386
c++cliのラッパdllを挟んでc#dllを呼ぶとかc#dllをcom参照可能にするとか.NET DLLExportを使うとかあるよ



393 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 13:04:02.42 ID:Rei0r571.net]
>>388
そういうのはできるかどうかを含め、どういう環境で何を対象に何をしたいのかによる。
そんなことすら書いてない人にいきなりキーワードをあげる必要はないよ。

394 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 13:10:20.08 ID:tD0M3iYv.net]
べつにキーワードくらいいいじゃん

395 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 13:17:19.51 ID:Rei0r571.net]
技術に関しては不正確な情報を垂れ流すことほどの害悪はない

396 名前:デフォルトの名無しさん [2021/12/12(日) 14:51:29.97 ID:4sEaLykb.net]
めんどくさい奴だなw

397 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 14:55:11.15 ID:0XY4m15b.net]
悪意を持って嘘をつくのはいかんが
信じていたことが後に間違っていたことに気付くことはあり
それへの虞を言い訳に何もしないやつと
自らの誤りに気付いたときに潔くないやつは生ゴミだ

398 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 15:18:45.20 ID:MG1pihlR.net]
そもそも>>391の言う不正確な情報ってなんだ?

399 名前:デフォルトの名無しさん [2021/12/12(日) 16:31:47.95 ID:4sEaLykb.net]
>>394
Linux環境ではC#のCOM相互運用できないとか、かなあ?

400 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 16:41:36.70 ID:2ZUu/eca.net]
>>387
君は役に立たんなw

>>388
ありがとう
やっぱそういう方法になるんだね

401 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 16:45:20.02 ID:Rei0r571.net]
>>394
今回の話で言えば条件によっては動かないのにさも動くかのようにミスリードする情報
相手の勘違いを指摘する機会がないことにより、結果的に回答にならない情報

402 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:00:15.53 ID:ooYWiIrJ.net]
>>395,397
ありとあらゆる環境で動く回答しか認めないとかアスペ全開やなw



403 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:05:43.60 ID:Rei0r571.net]
>>398
普通ですよ。環境はおろか困っている状況すら何も書いてないのだから。普通に釣りの気配しかありません。

404 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:16:30.63 ID:Rei0r571.net]
あと加えて言うならば、一般に・・・という話なのですが、
runtimeでVMを動かすような言語の場合、あまりnative側からキックするような使い方をしません
組み込みなど、そうせざるを得ない特殊な状況のときくらいですね

405 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:18:23.27 ID:tD0M3iYv.net]
んで根掘り葉掘り聞くだけ聞いて結局回答しないパターン、ってのはよく見るな。

406 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:26:07.41 ID:Rei0r571.net]
>>401
それは分かりもしないのに回答しようとしたケースですね
全条件想定しないで回答しようとするとそうなります

407 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:29:25.52 ID:Rei0r571.net]
もちろん聞いたことに答えがない場合も回答する機会は来ませんけどw

408 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 21:03:58.85 ID:A2l5mzZ3.net]
浮動小数点の0.0以外の真偽値って規定されてるんですか?
2.0 == trueが偽になるのにif(2.0)は真のように振舞うのでよく分からなくなりました

409 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 21:11:05.34 ID:LDYHaH+j.net]
それはtrueが1に変換されて比較してるのでは

410 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 21:13:32.32 ID:2ZUu/eca.net]
0は偽でそれ以外は真
if(5) も if(10) も 0 以外だから真
5も10も真だが 5 == 10 は当然等しくないため偽になる

411 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 21:34:12.15 ID:Rei0r571.net]
>>404
>>405が正解
暗黙変換には一定のルールがあってそれに従って変換するとそうなる

2.0 == true
-> 2.0 == 1
-> 2.0 == 1.0
-> false

if (2.0)
-> if (2.0 != 0)
-> if (true)

https://en.cppreference.com/w/cpp/language/implicit_conversion
https://en.cppreference.com/w/cpp/language/operator_comparison

412 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 21:36:42.12 ID:Rei0r571.net]
if (2.0 != 0)はあんまり正確じゃないけどねw



413 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 21:40:50.69 ID:f1HMG1tw.net]
当然ながらbool(2.0) == trueとすれば真になるよ

414 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 21:50:35.10 ID:GurY6adw.net]
bool(2.0) == true
2.0 == double(true)
で曖昧にならない
こういうのoperatorとctorでは作れないもんかね

415 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 21:58:10.81 ID:anT0EydK.net]
>2.0 == double(true)

え?

416 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 22:07:54.75 ID:XiOitZFG.net]
最近本当に質問者も回答者も酷いな・・・日本語からやばい
>>410
何が曖昧だと言っていて、こういうのってどういうのなんでしょ?
>>411
え?じゃ何も伝わらない

417 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 22:47:49.66 ID:rx7XzRPV.net]
そういうのを求めるなら上級者の相談室でも作ってそこにいればいいじゃない
人のやり取り見て文句いうだけの人なんて居ても邪魔なだけだし

418 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 22:54:20.23 ID:XiOitZFG.net]
そんな難しい要求してないんだけどw
一応↓なスレッドもありますよ

0からの、超初心者C++相談室
https://mevius.5ch.net/test/read.cgi/tech/1542002113/

419 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 23:35:59.51 ID:GurY6adw.net]
何も言ってないやつとじゃ話にならん
マウント取ったつもりになってろよアホ

420 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 01:10:13.82 ID:4HDQQOQ1.net]
ID:XiOitZFG
またコイツ自分賢いと思ってる例のガイジか

421 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 01:43:40.68 ID:vFkeyZ3D.net]
天に唾するクンじゃないよね?

422 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 04:27:52.83 ID:l53ksWPX.net]
std::array<std::array<int, 2>, 2> a{1, 2, 3, 4};
だとコンパイルできて
std::array<std::array<int, 2>, 2> a{{1, 2}, {3, 4}};
だとコンパイルできないのってなんでですか?
下は内側の初期化子リストの型推論が上手くいかない気はするのですが上がOKな理由が全然分かりません



423 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 09:36:15.02 ID:jz8gmYNu.net]
arrayは設計悪いね
string_viewみたいなラッパーのほうがマシ

424 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 13:08:07.96 ID:64LuYoGR.net]
arrayはそんなに設計の余地ないし別によくね
ラッパークラスは役割が別だし比較する意味がわからん

425 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 13:45:14.16 ID:NTJkXylC.net]
>>418
こうすればいけるね
波括弧が一つ余計に必要なのがなあ

std::array<std::array<int, 2>, 2> a{{{1, 2}, {3, 4}}};

426 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 15:27:55.81 ID:W58I2MTh.net]
>>418
>>420,421 の見解が適切
構造上は以下と等価
struct S1 { struct S2 { int e[2]; } s[2]; };
なので、中括弧を丁寧に書くと↓が正しい
S1 s{{{{1,2},{{3,4}}}};
質問でエラーになったケースは、上の例でメンバsを{1,2}で初期化しようとしため、{3,4}が余ってエラーになる。

https://en.cppreference.com/w/cpp/language/aggregate_initialization

427 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 19:16:16.31 ID:l53ksWPX.net]
>>421
>>422
ありがとうございます
配列をメンバに持ってるので本来は波括弧が二重に必要になるんですね
今までは1次元でなんとなく配列と同様で動いていたので省略しているという認識がありませんでした

428 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 20:13:02.90 ID:kTLKUa7o.net]
a{{1, 2}, {3, 4}}で初期化できるようにしようぜっていう提案もあったけど
初期化ルールがますますカオスになるので却下された

429 名前:デフォルトの名無しさん [2021/12/16(木) 18:55:44.40 ID:Q3qUbeDH.net]
テンプレートで関数の引数を書く方法がわからないんですが

sort(V.begin(), V.end(), ラムダ式)

を自作するにはどうやればいいんでしょうか

430 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 18:59:42.63 ID:oxWy3zzs.net]
まず日本語から勉強してください
「テンプレートで関数の引数を書く方法」と「sort(V.begin(), V.end(), ラムダ式)を自作」には何の関連もありません

431 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 18:59:43.14 ID:oxWy3zzs.net]
まず日本語から勉強してください
「テンプレートで関数の引数を書く方法」と「sort(V.begin(), V.end(), ラムダ式)を自作」には何の関連もありません

432 名前:デフォルトの名無しさん [2021/12/16(木) 19:10:09.52 ID:Q3qUbeDH.net]
自己解決しました
リンク先みながらこれで出来ました



template<typename FNC>
void usort (FNC&& fuc) { cout<< fuc(2) <<endl; }

int main() {
usort( [](int x) { return x+2; } );
}

https://zenn.dev/rita0222/articles/4bb5023e48c134



433 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 19:16:51.92 ID:oxWy3zzs.net]
質問と回答はおろか日本語も覚束ない人の記事の宣伝はどうかと思いますよ

434 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 19:28:45.53 ID:/OSP+i6s.net]
ごめん例のアスペじゃないけど俺もこの質問は日本語がひどいと思う

「テンプレートを使って、関数を引数とする関数を書く方法がわからない」でいいんだよね?
「で」も「の」も意味が複数ある助詞だから次から気を付けような

435 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 22:08:17.98 ID:oxWy3zzs.net]
自演乙

436 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 22:39:42.44 ID:G+T88tW/.net]
VC++の質問になってしまうかもしれませんがよろしくお願い致します。

void Func() throw (const char*);とした関数で静的に例外の型チェックをしてコンパイルエラーなり吐いてもらうことはできないのでしょうか?
try { Func(); } catch (const wchar_t* ex) {}と書いてしまった場合等にコンパイルエラーを出してもらいたいです

437 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 23:32:36.81 ID:JPMZsaO2.net]
>>432
合法なものにエラーとかねえわ

438 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 23:52:05.34 ID:FKQX+MA6.net]
例外指定はもうすぐ消えてなくなる機能だから使うのやめた方がいいよ

439 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 00:05:45.43 ID:5GaBUmyD.net]
例外指定は調べたらC++17で削除されてんだな。
例外指定は実行時のチェックで意味ないと思ってたから一度も使ったことない。

440 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 02:04:19.31 ID:yobIy+EO.net]
throwで投げる例外を指定するのはC++11以降非推奨でC++17で削除された
例外を投げ得ることを示す(空の)throwもC++11以降非推奨でC++20で削除

https://ja.cppreference.com/w/cpp/language/except_spec

結論としては無理

441 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 02: ]
[ここ壊れてます]

442 名前:10:12.31 ID:WdsmvZWK.net mailto: 意味わからんもんなthrow接尾子
投げる例外全部把握出来んのかよって
[]
[ここ壊れてます]



443 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 07:30:27.08 ID:zT9OLvmm.net]
ファイルオープンの失敗をどうやって間違えずに処理させるんだよ

444 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 07:31:31.20 ID:zT9OLvmm.net]
20年ちかくそれがいいことだっつってやってたんだぞ

445 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 07:47:02.08 ID:raeshKom.net]
void aho() throw(std::bad_exception);

446 名前:デフォルトの名無しさん [2021/12/20(月) 09:50:56.71 ID:TszysAyf.net]
ポインタ型変数のスタック消費が4バイト(32bit OS)または8バイト(64bit OS)なのはわかるんだけど、
参照型変数ってスタックを何バイト消費するの?

447 名前:はちみつ餃子 mailto:sage [2021/12/20(月) 11:34:47.56 ID:GbIoN43K.net]
>>441
GCC の資料によれば Itanium C++ ABI に従う。 (Itanium 以外でも ABI は Itanium ということらしい。)
https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html#abi.cxx_interface

で、 ABI のほうでの定義では引数・返却値における参照の実態はポインタだし、
POD のレイアウトとしても参照はポインタのように扱われる。
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#reference-parameters
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#reference-return-values
https://itanium-cxx-abi.github.io/cxx-abi/abi.html#pod

内部的には参照はほぼポインタだと思っていいんでないの。
自動でデリファレンスするポインタって感じ。

ちなみに言語仕様的には参照はオブジェクトではなく参照先のオブジェクトの別名のように扱われるので、
sizeof に渡したときには参照先の型の大きさが返ってくることになってる。
sizeof(int&) みたいにしたら sizeof(int) と同じ意味になるってことね。

448 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 11:49:32.57 ID:LVF1I4ij.net]
確認してみた。
$ gcc -x c++ -S - -o - <<EOF | sed -n '/^main:/,$p;/\$2/q'
int main() {
int a = 1;
int& r = a;
r = 2;
return a;
}
EOF
main:
.LFB0:
.cfi_startproc
endbr64
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $32, %rsp
movq %fs:40, %rax
movq %rax, -8(%rbp)
xorl %eax, %eax
movl $1, -20(%rbp)
leaq -20(%rbp), %rax
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
movl $2, (%rax)

449 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 12:07:37.09 ID:IpG9nRdD.net]
参照先が見えてるところでは
参照先へ直にアクセスしてコストゼロだったり
参照引数をとる関数でもインライン化された場合はゼロ
てなことがなければポインタ1個分

450 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 12:13:52.79 ID:LVF1I4ij.net]
そういうのは最適化なので無関係
$ gcc -O3 -x c++ -S - -o - <<EOF | sed -n '/^main:/,$p;/ret/q'
int main() {
int a = 1;
int& r = a;
r = 2;
return a;
}
EOF
main:
.LFB0:
.cfi_startproc
endbr64
movl $2, %eax
ret

451 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 21:41:58.49 ID:c8hM8/Kk.net]
最適化する前の意味合いとして
ポインタ1個分のコストを必ず発生するという規定なんかあったか?

452 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 21:44:15.52 ID:LVF1I4ij.net]
誰もそんな話はしてないので、お前が調べて貼れ



453 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 22:11:35.36 ID:c8hM8/Kk.net]
444へのレスで最適化がどうたらぬかしといて
そんな話はしてない、かよ
アセンブラ貼ってた威勢はどこへ吹っ飛んだんだかw
いいよ、逃げたきゃ逃がしてやるよヘタレ野郎

454 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 22:16:05.29 ID:LVF1I4ij.net]
最初から処理系(gcc)の話しかしてない。規定の話をしてるのはお前だけだ。早く貼れ。逃げるな。

455 名前:デフォルトの名無しさん mailto:sage [2021/12/20(月) 23:16:36.18 ID:TszysAyf.net]
unique_ptrオブジェクトとそ

456 名前:フ実体を参照する参照型を使えば、
スタック消費を抑えつつスタック変数を使っているかのようなソースコードが書けそうだけど
[]
[ここ壊れてます]

457 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 00:06:02.44 ID:Ug1txKhz.net]
それは全くレイヤーの違う話
アプリのコンテキストを構造体/クラスにしてヒープかスタティックに置くだけで実現できる
実現手段としてunique_ptrを使いたいなら使えばいいというだけ

458 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 00:10:51.14 ID:QziEyx5H.net]
>>451
ひょっとして ID:c8hM8/Kk かな?
無意味な煽り書き込みやめてくれ

459 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 00:20:05.56 ID:Ug1txKhz.net]
煽りではないんだが、俺はID:LVF1I4ij

460 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 00:33:36.24 ID:QziEyx5H.net]
>>453
レイヤーが違うとか、勝手に仕切るな

461 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 00:42:51.31 ID:QziEyx5H.net]
構造体/クラスをヒープに置いたところで、その構造体/クラスのメンバー関数でスタック変数を使ってたら意味がないだろ
何が問題提起されているのか理解してから書き込んでくれ

462 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:02:00.74 ID:Ug1txKhz.net]
スタック消費を抑えたいなら静的に確保するかヒープを使えばいいというだけの話でしょ。
struct app_context {int x;};
void func_old() {
int x = 0;
}
void func_new(app_context* ctx) {
ctx->x = 0;
}
int main() {
auto ctx = new app_context();
func_old();
func_new(ctx);
delete ctx;
return 0;
}
各関数/メソッド単位で細かくしたいなら、try〜catchでやってもいいし、スマートポインタを実装・流用してもいい。その際にunique_ptrを使いたいなら使えばいいというだけ。
伝わらないようなので少し細かく書いた。伝わるんだろうか・・・。



463 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:16:14.39 ID:QziEyx5H.net]
>>456
君は回答者に向いてない

464 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:18:02.55 ID:QziEyx5H.net]
アムロの父親みたいな変な書き込み、リアルに遭遇するとやはり引く

465 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:18:43.76 ID:Ug1txKhz.net]
>>457
質問したいレイヤと解決策のレイヤが合ってないだけw

466 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:27:03.87 ID:QziEyx5H.net]
自覚なさそうなところがますますテム・レイ感あるわ
お大事に

467 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:46:16.28 ID:Ug1txKhz.net]
質問して複数人に回答してもらってるのに、ただ煽るだけの人に「自覚」とやらを問われてもねw
大好きなガンダムのたとえに勝手に満足して病んでてくれ
君にプログラミングは向いてない

468 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:50:07.69 ID:QziEyx5H.net]
今時特別な理由もなくnew演算子を使うC++プログラマは間違いなく無能だよ

469 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 01:53:35.52 ID:Ug1txKhz.net]
理由はC++標準ライブラリを使用しない言語/処理系レベルの話をしていたから

470 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 02:05:33.42 ID:QziEyx5H.net]
ガンダムの記憶回路にとりつけるやつ好きなだけ作ってていいぞ

471 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 02:17:40.01 ID:Ug1txKhz.net]
妄想の中でもニュータイプじゃない君にプログラミングは無理w
ガンダムに辿り着けずコロニー内で果てる

472 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 14:30:10.99 ID:bvwR7M/G.net]
テンプレートを引数に取る関数で、
その入力として、vectorと配列を取るような関数で、いい書き方ってないですかね?
// vector向け
template<class T>int sum(const T& v, int size)
{
int acc = 0;
for(int i = 0 ; i < size ; i++){acc+=v[i];}
return acc;
}
内容同じなのに配列向けに
template<class T>int sum(const T* v, int size)
を作ってるけど一緒に表記できないかな、みたいな



473 名前:はちみつ餃子 mailto:sage [2021/12/21(火) 15:12:48.55 ID:f1yxmqA1.net]
>>466
???
その定義で配列も受け取れるけど。
int main(void) {
int x[] = {1, 2, 3};
std::cout << sum(x, 3) << std::endl;
}

474 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 15:20:59.50 ID:Ug1txKhz.net]
vectorならiteratorにしてもいいと思う
#include <vector>
#include <iostream>
using namespace std;
template<class T>int sum(const T begin, const T end) {
int acc = 0;
for(T i = begin; i != end; ++i){acc+=*i;}
return acc;
}
int main() {
int a[] = {1,2,3};
const size_t s = sizeof(a)/sizeof(a[0]);
vector<int> v(a, a + s);
cout << sum(a, a + s - 1) << endl;
cout << sum(v.begin(), v.begin() + (v.size() - 1)) << endl;
return 0;
}

475 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 15:35:03.48 ID:bvwR7M/G.net]
ありがとうございます
>>467 頭のどこかでポインタにしないと取れないと思っていました

>>468
iteratorは馴染みがないのでそのコードで勉強させていただきます

476 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 15:39:21.19 ID:sStr75A4.net]
>>462
ただのサンプルコードに今時とか無能とか・・
中で何が起きるか把握してない無能を量産しようとしないでくれ

477 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 15:47:15.24 ID:msz2/cZB.net]
本来はrangeの出番なんだがな
導入が遅れたばかりに……

478 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 16:45:50.91 ID:fi3Z01x+.net]
#include <iostream>
#include <vector>
#include <array>
#include <string>
using namespace std;
template<typename Iter>
auto sum(Iter a, Iter b) {
using value_type = remove_const_t<remove_reference_t<decltype(*a)>>;
value_type acc {};
while (a != b) acc += *a++;
return acc;
}
int main() {
const int a[] { 1, 2, 3 };
vector<int> v { 4, 5, 6 };
array<double, 3> d { 3.5, 1.2, 0.9 };
const string s[] { "u", "n" "k", "o" };
cout << sum(begin(a), end(a)) << endl;
cout << sum(begin(v), end(v)) << endl;
cout << sum(begin(d), end(d)) << endl;
cout << sum(begin(s), end(s)) << endl;
return 0;
}

479 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 16:51:06.96 ID:msz2/cZB.net]
std::iterator_traits使おうよ

480 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 16:56:11.01 ID:fi3Z01x+.net]
#include <iostream>
#include <vector>
#include <array>
#include <string>
#include <iterator>
using namespace std;
template<typename Iter>
auto sum(Iter a, Iter b) {
using value_type = typename iterator_traits<Iter>::value_type;
value_type acc {};
while (a != b) acc += *a++;
return acc;
}
int main() {
const int a[] { 1, 2, 3 };
vector<int> v { 4, 5, 6 };
array<double, 3> d { 3.5, 1.2, 0.9 };
const string s[] { "u", "n" "k", "o" };
cout << sum(begin(a), end(a)) << endl;
cout << sum(begin(v), end(v)) << endl;
cout << sum(begin(d), end(d)) << endl;
cout << sum(begin(s), end(s)) << endl;
return 0;
}

481 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 17:32:40.16 ID:Ug1txKhz.net]
sumがunkoは独創的だと思うけど、戻り値の型はテンプレート引数でいいかもね

482 名前:sage [2021/12/21(火) 18:15:52.03 ID:qDHWQ1/Y.net]
↓こんなコード書いてるんですが,もっとエレガントに代入できませんか?
a[0]=*ptr;
a[1]=*(ptr+1);
a[2]=*(ptr+2);



483 名前:蟻人間 mailto:sage [2021/12/21(火) 18:28:20.41 ID:NT9maPPc.net]
ptr[1]

484 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 19:09:14.75 ID:qDHWQ1/Y.net]
>>477
エレガントな回答ありがとうございます.
解決しました.

485 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 20:23:30.29 ID:iHW7b2cO.net]
std::copy(ptr, ptr + 3, a);
僕はfor文のほうが好きです

486 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 20:25:38.21 ID:UPYLxpzi.net]
C++98以前の化石

487 名前:デフォルトの名無しさん mailto:sage [2021/12/21(火) 21:03:47.64 ID:msz2/cZB.net]
std::copy_nもあるぞ

488 名前:デフォルトの名無しさん mailto:sage [2021/12/22(水) 18:49:46.59 ID:ycAkB2VB.net]
>>479
>>481
こんなんもあるんですね.使わせてもらいます.ありがとうございました.
最近c++やり始めたんですが,ポインタが出てくるとギョッとします.

489 名前:デフォルトの名無しさん mailto:sage [2021/12/22(水) 19:44:38.16 ID:VkqlmauA.net]
何に使いたいのか知らないけど、C++やめてRustの方がいいんじゃないの?

490 名前:デフォルトの名無しさん [2021/12/22(水) 20:00:31.77 ID:j6Uulo2p.net]
高速grepツールとして有名なripgrepはRustで作られてるからRustは優れた言語なのだろう、ぐらいなことは察せられるが

491 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 08:08:59.49 ID:zbE03cOE.net]
>>483
rustなんてプログラム初級者に勧めるなよ。
あんなの習熟した上級者向けの言語だわ。c++以上に初級者向け解説が無いのは致命的。

あと、Rustはスレ違いだからな。このコメにもレスするなよ。

492 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 09:13:28.05 ID:cFIeneRn.net]
>>485
C++の方が難しいよ
ポインタでギョッとするレベル=Cに抵抗があるなら、わざわざC++を使うよりはRustでいい
5chはコメとは言わない
お前がレスしなければ良かっただけ



493 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 09:43:11.86 ID:TuHGjVDJ.net]
Rust は良いアプローチだがどうしても記述量が多くなるから敬遠してる

494 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 11:51:22.33 ID:Gjq2t2pD.net]
>>486
ポインタは名札のメタファーを使った説明が確立しているけど、所有権、譲渡、借用、ライフタイムの初心者向け説明はクソみたいのしか無いだろ。そんなもん初級者に紹介するなよ。

スレ違いでわざわざ役立たずを紹介するやつは何を考えているんだろうかね?

495 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:29:11.30 ID:cFIeneRn.net]
>>488
はいはい、ID変えてご苦労さま
同じことだけど、生アドレス使うの得意でない言語の方が向いてるだろってだけ
C++は少なくともCをまともに使えるようになってから習得すべき

496 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:33:21.82 ID:lsirm1I0.net]
.hや.cpp以外からいじられたくない変数に対するインライン関数をパブリックに公開したいのですが、classを利用する以外にこのような事はできないのでしょうか?
staticや無名名前空間を利用するとcppファイルで利用できなくなりますしやはりclassを使えということでしょうか?

extern int value; //これは隠蔽したい
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい

497 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:43:43.47 ID:N07J633j.net]
namespace {
extern int value; //これは隠蔽したい
}
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい

498 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:44:08.09 ID:IRDqWaPI.net]
>>489
ならc紹介しろよ。
スレ違いのクソを紹介するな。

499 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:44:27.15 ID:N07J633j.net]
もとい
namespace {
int value; //これは隠蔽したい
}
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい

500 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:47:57.55 ID:IRDqWaPI.net]
>>493
関数内にstatic変数持てなかったっけ?

501 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:52:37.53 ID:IRDqWaPI.net]
>>494
連投失礼。
自身の関数内にあるstatic変数の参照を返す関数を用意するパターン無かったっけ?

502 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:58:20.57 ID:cFIeneRn.net]
>>492
ポインタに抵抗ある人にCを勧めるくらいならC++に近くて安全なRustを勧めるのが筋
見当違いな話をしてるだけだよ君は



503 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 12:59:07.12 ID:6GqfEn2+.net]
valueの立ち位置が気になるが
extern(実行ファイル内で全部共通)するならinline関数のIsZeroが見えた時点でvalueも見えてないといけない

504 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 13:03:49.15 ID:cFIeneRn.net]
class hoge {
static int value;
public:
static bool IsZero() { return value == 0; }
};
inline bool IsZero() { hoge::IsZero(); }
int main() {
return IsZero();
}

505 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 13:07:02.43 ID:lsirm1I0.net]
>>493
ありがとうございます
ヘッダにそれを書いたとしてcppファイルからvalueを扱えるのでしょうか?

>>497
JavaやC#で言うところのprivate static intとして該当ヘッダ内&cppファイル内からは自由に扱え、それ以外からは見えなくさせたいという値です

506 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 13:20:56.47 ID:cFIeneRn.net]
JavaやC#でもそんなところに可視性の定義はない。

507 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 17:32:16.18 ID:SEEFcByD.net]
>>496
相手がなんでc++を使っているのかのニーズすら確認しないで何を独りよがりなことを言っているんだよ。
相手の目的を無視してスレ違いのツールを薦めるのはアホのやること。
Rustの伝道師はこんな低レベルなのかね。

508 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 17:36:54.99 ID:N07J633j.net]
あーうるせえ
C++スレでRust Rust連呼すんな
寒すぎんだよ

509 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 18:02:45.75 ID:cFIeneRn.net]
>>501
別に俺はRustの伝道師ではないが、>>483で一言Rustを勧めたらIDをコロコロ変えながら文句を言ってくる人がいるだけ
ポインタが不得意でRustも使えない質問者ご本人様だと思ってる

510 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 19:12:55.62 ID:AUfS9hAV.net]
>>493
試してないけどこんなのはどうかね。

#include <iostream>
#include <cstdlib>

class Accesser;

class Wall {
static int & val(){ static int v; return v; };
friend Accesser;
};

class Accesser {
public:
Accesser(){
int &v=Wall::val();
v=1;
}
~Accesser(){
std::cout << Wall::val()<< std::endl;
}
};


int main()
{
Accesser a;
std::cout << "Hello, Wandbox!" << std::endl;
}

511 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 19:32:24.95 ID:3yOXD4ws.net]
inlineで書きたいらしいので、それだとコンパイル単位で値が変わっちゃうのでは?

512 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 19:55:38.05 ID:CLdJLYY1.net]
>>505
インラインはどのみち無理じゃない?
関数内static変数は共通になる保証があったと思う。どこだか忘れたけど。



513 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 20:02:52.87 ID:cFIeneRn.net]
クラス内に実装を書くなどヘッダにあればどの道インラインだと思う

514 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 20:05:51.29 ID:cFIeneRn.net]
staticは静的に確保されるので、インライン展開されても同じシンボルを参照する

515 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 20:30:35.89 ID:cFIeneRn.net]
ちゃんと書いておくと、>>490にもともとクラスを使わない指定があるので、どうかね?
という意味では前提を満たしてないと思う
クラスを使う最も素朴な例は>>498に書いておいた

516 名前:デフォルトの名無しさん [2021/12/23(木) 21:54:27.28 ID:4lOSoN0i.net]
メモリ確保用途でvectorやstringつかい
ポインタアクセスすれば、new で確保するのと速度に大差ないとおもうんですが
実測すると10%〜くらいSTLつかうほうが速度低下するみたいなんですが
直メモリアクセスでも落ちるのはなぜなんでしょうか

517 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 22:14:02.53 ID:6YhOrdG1.net]
その計測コード貼ってみ
多分メモリアクセスとは関係ない所で時間食ってる

518 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 22:16:19.47 ID:lsirm1I0.net]
>>509
ありがとうございます
やはりクラスを利用しないと実現無理そうなので、498のようなC#で言うところのstatic class的な形でやることにします

519 名前:510 [2021/12/23(木) 22:21:06.77 ID:4lOSoN0i.net]
これです・・・


https://ideone.com/NKSCRi


vector : 974.971 ms
new char : 921.191 ms
new int32 : 899.579 ms

520 名前:デフォルトの名無しさん [2021/12/23(木) 22:38:03.27 ID:MjSWMWRR.net]
1秒もかかる?

521 名前:510 [2021/12/23(木) 22:49:58.53 ID:4lOSoN0i.net]
こっちだと大差がついてるんですが
家のPCでもideone.comよりも差が付きます vector確保のほうが遅い


https://paiza.io/projects/9wWo36-bjTCL_S0WcGbaWA

vector : 459.154 ms
new char : 184.758 ms
new int32 : 167.899 ms

522 名前:510 [2021/12/23(木) 22:55:16.12 ID:4lOSoN0i.net]
自己解決しました
メモリ確保と解放部分を含めて計測してたのを
コピー部分のみの測定にしたらほぼ一緒になりました


https://paiza.io/projects/ge5iOWrzGu2E2PjogsRlUw

vector : 219.947 ms
new char : 204.565 ms
new int32 : 214.644 ms



523 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 22:55:24.77 ID:6YhOrdG1.net]
ほとんどメルセンヌツイスタの実行時間じゃね

524 名前:デフォルトの名無しさん [2021/12/23(木) 22:56:40.08 ID:MjSWMWRR.net]
確保にかかってると思う?
一秒はさすがにないと思う。
何かおかしいな。

525 名前:デフォルトの名無しさん [2021/12/23(木) 22:58:15.18 ID:MjSWMWRR.net]
vector云々以前に、newバージョンも遅すぎると思う。
話にならないくらい。
i8008とかじゃないよね?

526 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 23:00:56.66 ID:6GqfEn2+.net]
C++/CLIでstd::mutex使えないのなんでなん?

頑張ってWin32APIで代用する気力はあるけどわざわざ無効化されてる理由が知りたい

527 名前:510 [2021/12/23(木) 23:05:52.89 ID:4lOSoN0i.net]
メモリ確保・解放と、メルセンヌツイスタを外して計測したら
今度はvectorのほうが圧倒的に早

528 名前:「んですが

https://ideone.com/rKv4qv

vector : 237.55 ms
new int32 : 713.82 ms
[]
[ここ壊れてます]

529 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 23:26:56.25 ID:4lOSoN0i.net]
計測時間は、ある程度の長さで、オンライン実行環境のタイムアウトにならないように
ループ回数を変更してるので

530 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 23:54:08.59 ID:58w1xOUi.net]
生ポインタにしたら同じ感じにならない?
unique_ptr<int32_t[]> p(new int32_t[2*size]);
int32_t* A = p.get();
mmcpy(A, size);

531 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 01:54:49.07 ID:T9e6TA98.net]
手動でループ回数変更とか馬鹿らしいからquick-bench.comとか使うのオススメ

532 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:00:08.27 ID:opQHMY4K.net]
overrunがある
std::make_uniqueを使え



533 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:04:03.38 ID:opQHMY4K.net]
https://ideone.com/JupGoY

534 名前:デフォルトの名無しさん [2021/12/24(金) 09:05:00.82 ID:6d0f054m.net]
サンプルコードだからと安易にnew演算子使う風潮やめたほうがいい
コールバックや別スレッドに渡すインスタンスの生成にのみnew演算子を使うべき

535 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:08:39.52 ID:opQHMY4K.net]
そういうことではなくunique_ptrを理解してから使えというだけ

536 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:09:02.65 ID:6d0f054m.net]
バッドノウハウがいつまでたってもなくならない原因は入門者向けのサンプルコード

537 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:09:36.51 ID:opQHMY4K.net]
そもそもサンプルコードの質が悪すぎる

538 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:10:57.45 ID:opQHMY4K.net]
今回のね(>>526)

539 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:11:48.94 ID:6d0f054m.net]
>>528
むしろ「理解してなくても使え」だよ
ナマポだってそうだ
サティアンとか金目とかじゃなくてな
実際に使って痛い目にあわないと

540 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:12:11.50 ID:opQHMY4K.net]
>>462は壮大な勘違い

541 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:13:48.09 ID:opQHMY4K.net]
>>532
何でもそうだが、理解しないで使うからこういう問題が跡を絶たない
「理解してなくても使え」が何よりも悪い

542 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:21:12.05 ID:6d0f054m.net]
>>534
それは違う
使わなければ理解できないよ
自身が初心者だった頃を思い出せないくらい耄碌したの?
お大事に



543 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:22:45.08 ID:opQHMY4K.net]
>>535
俺は初心者の頃から理解できていないものを何となく使うとかはしていない
それが何よりも悪いことを教わってきてるから

544 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:25:48.61 ID:ZnDQBfvC.net]
練習と本番を一緒くたにしてるな
まさに現場の癌だったと自白してるようなものだ

545 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:28:20.47 ID:opQHMY4K.net]
まさにお前がな

546 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:30:24.34 ID:opQHMY4K.net]
コロコロID変わる質問者兼劣悪回答者の荒らしで、そもそも勤務経験なさそう、と思ってるよ

547 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:31:16.13 ID:6d0f054m.net]
>>536
現役離れてずいぶん経つの?
実務やってれば仕様書の文章があいまいで実際に動かさないと理解できないってことがいくらでもあるでしょ
「仕様書はない、ソースのみ(キリッ」という状況なんて普通なはずだが

548 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:32:13.38 ID:6d0f054m.net]
教わるとか受け身かよ、アホかと
学ぶんだろ

549 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:35:00.51 ID:6d0f054m.net]
上司が「お前は触るな」と言いたいのをオブラートに包んで「理解してから触れ」と言われたクチだろう
できないPGだった証拠

550 名前:デフォルトの名無しさん [2021/12/24(金) 09:36:56.46 ID:6d0f054m.net]
「理解してから使え」なんて、危なっかしい無能な人を開発現場から穏便に排除する時に使う言葉だよ

551 名前:デフォルトの名無しさん [2021/12/24(金) 09:42:48.15 ID:6d0f054m.net]
肩叩きされていたことに気づけないくらいに読解力が低い

552 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 09:48:44.26 ID:ZnDQBfvC.net]
「理解してから使え」
「はい、理解してきます」
「理解しました!今度こそ大丈夫です」←わかった気になってるが自分が何を分かっていないのかがわからない



553 名前:デフォルトの名無しさん [2021/12/24(金) 09:54:19.02 ID:6d0f054m.net]
普通は他人に迷惑かけることなく作業しろ、って言えば良いいんだけど、
察するに上司はそれまでの積み重ねで追放する気満々だったんじゃないかな

554 名前:デフォルトの名無しさん [2021/12/24(金) 10:05:26.45 ID:6d0f054m.net]
unique_ptrやshared_ptrは初心者でもコンパイラのエラーや警告に従うだけで安全にコードを書けるようになるからおススメだと思うよ
もちろん頓珍漢な警告メッセージを出力する不親切なコンパイラだとそうはいかないが

555 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 12:58:00.18 ID:a16a8gMY.net]
下らない煽りを何回にも分けて書くな無能

556 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 15:17:39.58 ID:miWR5HNI.net]
コールバックや別スレッドに渡すインスタンスの生成であっても
new演算子を使わねばならない必然性は無いので

ていうかnewしたブツを渡した先でdeteteさせる設計のは
newしたコードとdeleteするコードが同じCRTでないと危険なので
異なるプロジェクトの間でやるのは一般にアンチパターンなので
 1. そもそも渡さない(利用するスレッドに生成させる
 2. (どうしても渡したい場合は)コピーして渡す
 3. オブジェクトの所有権を渡す側のスレッドが握って生存期間が利用期間を包含することを保証する
のどれかなので

557 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 15:18:01.17 ID:miWR5HNI.net]
少なくともウィンドーズのDLLはDllMain()を有する1本のプログラム同然なので
Ver.0.1のCRTをスタティックリンクしたDLLというものが作れてしまうので
Ver.0.2のCRTとリンクされるコードで生成したオブジェクトのポインタを渡せてしまうので

558 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 15:49:34.78 ID:/YMztZoD.net]
のでので言ってるだけで結論がない
頭悪そう

559 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 21:39:56.11 ID:0AIK3bm0.net]
ActiveX系使ったことないんだろうなって容易に推測でける

560 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 23:47:20.34 ID:miWR5HNI.net]
しらそん
COMオブジェクトの中で異なるバージョンのCRTの混在が起きたら
同じことなんじゃないの

561 名前:デフォルトの名無しさん [2021/12/26(日) 01:42:46.74 ID:Fmrpdwj0.net]
アウトプロセス

562 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 02:08:50.44 ID:rFpP4pcL.net]
しらそん
アウトプロセスサーバが生成する
COMオブジェクトの中で異なるバージョンのCRTの混在が起きたら
同じことなんじゃないの
なので



563 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 02:10:54.75 ID:P9feSsDc.net]
自演って見苦しいな

564 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 05:25:00.76 ID:0FjCQ3kx.net]
>>549
そういうのをスマポでやれって話?
ヘッダで提供されるライブラリだからスマポもダメだと思うんだけど

565 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 05:43:12.94 ID:a8PAglQ+.net]
>>552
急にCOM持ち出すのはおかしいだろ

>>553
ふつーCoTaskMemAllocじゃねえかな

566 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 07:28:31.98 ID:z66Mwoku.net]
sin関数に入れる時間変数の値が大きくなるにつれ誤差が増えていって困ってます
fmod関数を使ってもあまり効果が見られませんでした
処理時間をそれほどかけずに解決出来る良い案何かありますか?

sin関数に入れる値の目安は100万くらいです

567 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 09:18:24.17 ID:6eMF2SNy.net]
100万をsin()しても、sin()は2π周期
doubleの精度15桁中の5桁以上を無駄にしている

sin()する用変数で毎回fmod(,2π)してもそこで誤差が貯まりそう

boost::multiprecisionとか?

568 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 09:35:40.45 ID:/woV9P1D.net]
出来るなら入れる数を作る時点で[0,2pi)に収まるように工夫する
それが無理なら多倍長浮動小数点数のライブラリ使うか自作するか

569 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 10:28:27.14 ID:a8PAglQ+.net]
>>559
sinの引数に入れる値を浮動小数点数で少しずつ足しこむような処理をしているなら、やめて別の方法を考えろ

570 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 11:32:37.05 ID:SV9DgXqP.net]
sinに時間を入れるのは次元がおかしい

っていうのは冗談で、質問者が何を問うてるのかわからん
sinにdoubleに収まるどんなデカい数を入れても精度は15桁くらい保証されるでしょ


>>560
> 100万をsin()しても、sin()は2π周期
> doubleの精度15桁中の5桁以上を無駄にしている
これもわけわかんねー
100万近いある数 x をsin()に入れるんでしょ?
x も sin(x) も上から15桁全部有効な桁でしょ
何が無駄になってるん?


>>562
こういう話ならわかる

571 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 12:03:23.64 ID:/woV9P1D.net]
sinのテイラー展開にxの大きな累乗が現れるからだよ
100万をバンバン累乗した級数で値域[-1,1]の関数計算してたら誤差まみれになるのは直感的に分かるだろ

572 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 12:47:17.91 ID:6eMF2SNy.net]
>>563
318310 * pi が100万に近い2piの倍数
https://keisan.casio.jp/calculator で、14桁で計算する

2 * pi = 6.2831853071796
sin(6.2831853071796) = 1.3523E-14

318310 * pi = 1000000.3575642
sin(1000000.3575642) = 3.291426496E-8

わかった?
桁数同じだから、でかい数は細かい所が消えるのよ



573 名前:デフォルトの名無しさん [2021/12/26(日) 15:05:31.07 ID:N3NYq5+A.net]
わかんない。

574 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 15:55:33.50 ID:SV9DgXqP.net]
>>565
現象としては確認できたが、理屈が分からない
>>564の言ってるようにテイラー展開の各項が激しくキャンセルし合って桁落ちするってこと?

575 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 16:03:55.94 ID:6s7ujcJo.net]
>>564
のテイラー展開は疑問なんだけど
関数が[0,pi/2.)への押し込みもやってくれるんじゃないの

576 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 17:28:50.32 ID:6eMF2SNy.net]
「桁数同じだから、でかい数は細かい所が消える」が理屈のつもりなんだけど…
sin(6.2831853) = -7.179586477E-9 だし、
sin(1000000.3575641670857) = -3.5E-14 だよ

577 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 17:52:52.66 ID:6eMF2SNy.net]
sin()の結果に13桁の精度が欲しいなら、入力値に小数点以下13桁の精度が要るのよ
sin()は2piの周期関数だから
1000000の所に7桁も使っちゃうのはもったいないのよ

578 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 19:17:02.92 ID:P9feSsDc.net]
まだ小学校の算数で分かる誤差の話してんの?
>>560で話終わらん奴は小学校からやり直せよ

579 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 19:41:54.46 ID:qnixUQRF.net]
桁に関する誤差とかどこの世界の小学校で習うんだよ

580 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 22:29:03.39 ID:Ep2AbKxF.net]
お前は小学校の国語からやり直せw

>> まだ「小学校の算数で分かる」誤差の話してんの?
誰も小学校で習うなんて言ってないぞ

581 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 22:43:40.78 ID:RjefXsAR.net]
log1pの存在理由も似たような話だね

582 名前:デフォルトの名無しさん mailto:sage [2021/12/26(日) 23:16:02.57 ID:P9feSsDc.net]
俺小学4年生で級数展開したπの計算してたけど・・・
6年生でアセンブラと実数使ってたけど・・・



583 名前:デフォルトの名無しさん mailto:sage [2021/12/27(月) 08:46:39.54 ID:B/I2o19O.net]
教える奴もよく分かってないからめちゃくちゃになってる

基本的には大きい数についても>>563の考え「x も sin(x) も上から15桁全部有効な桁」で合ってる
sin() が 0 になるケースを考えてるからややこしいんだよ
sin() が 1 になるケース、つまり pi/2 の奇数倍で 100 万に近い数を入れてみろ
そしたらちゃんと 15 桁くらい 1 になるから

0 がややこしい理由は、仮数部が何であっても良いから
例えば 1e-20 は仮数部には1桁目からゴミが入っているが、倍精度ではゼロと見なす

584 名前:デフォルトの名無しさん mailto:sage [2021/12/27(月) 10:35:52.12 ID:wn+BpFxZ.net]
>>576
お前は>>560様の爪の垢を煎じて飲んでから、小学校をやり直せ

585 名前:デフォルトの名無しさん mailto:sage [2021/12/27(月) 18:35:09.36 ID:osgcVgi4.net]
uniform_real_distribution の範囲を可変にしたいときってどうしたら良いでしょうか
0 から 1 までの実数を生成するようにしてそれを変数変換するべきですか

586 名前:デフォルトの名無しさん mailto:sage [2021/12/27(月) 19:02:31.64 ID:DQqD3vMw.net]
っparam

587 名前:デフォルトの名無しさん mailto:sage [2021/12/27(月) 20:26:27.31 ID:7ufKNB24.net]
>>576
1になるケースでほぼ1になるのは、そこでの微分が0だからだよ
入力値がちょっとずれても結果への影響が小さいのよ

588 名前:デフォルトの名無しさん mailto:sage [2021/12/27(月) 20:45:16.64 ID:7ufKNB24.net]
「x も上から15桁全部有効な桁」だからこそ、
1000000の所に7桁も使っちゃうのはもったいないのよ

sin(x)=0の所は微分が1または-1、入力のずれがそのまま出力に出る所

589 名前:デフォルトの名無しさん mailto:sage [2021/12/28(火) 01:04:16.62 ID:OVEU2JJm.net]
厳密な2πnと、doubleで表した有効桁数15桁の大体2πnに近い数字の差を計算すると、nが大きくなるほど差がデカくなってくるってだけの話じゃないの?
浮動小数点数は0から離れれば離れるほど目盛りが大きくなっていくのだから。
sinの実装がマクローリン級数展開でなくても起こる問題だと思うが。

590 名前:デフォルトの名無しさん mailto:sage [2021/12/28(火) 01:43:08.31 ID:NIM0c1vY.net]
小学生多すぎじゃないか?

591 名前:デフォルトの名無しさん mailto:sage [2021/12/28(火) 09:17:10.46 ID:p+qHklGW.net]
おまえさん1人だろ
中学以後、いつ何を習うか知らないようだが

592 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 21:49:37.03 ID:+eZ32Uo6.net]
>1e-20 は仮数部には1桁目からゴミが入っているが、倍精度ではゼロと見なす
mjk、

IEEE754の2進数形式の倍精度浮動小数点表示は
仮数部がケチ表現の52 bit(実質53 bit)で
指数部は-1022〜+1023なのやぞ
1e-20とか1×2^(-60)かそこらなので無問題で53 bit(=15.9桁)の精度ェ、



593 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 21:55:43.45 ID:+eZ32Uo6.net]
>sin(x)=0の所は微分が1または-1、入力のずれがそのまま出力に出る所
x << 1のとき
sin(x) ≒ x
であることの見事な工学的応用、

594 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 21:57:34.77 ID:+eZ32Uo6.net]
まつがえた |x| << 1 やったorz

595 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 01:48:03.91 ID:L6Vpkxay.net]
よっしゃ、よっしゃ、おっちゃんがいいもん作ったろう
https://ideone.com/fjxKtS

n=0,10000, 20000, 30000, ...,1000000 (とりあえず10000刻み)として、
2分探索でsin(x)=0となるxを、2π*n付近について調べてやった

そうやって求めたxをM_PIで割った結果はきっちり2*nになるから
sin(x)がxの周期関数だからといって必ずしもxの増大につれ誤差が増えるわけではないことがワカル

sin_valの値(=sin(x))が0に対して増えたり減ったりするのはマクローリン展開の近似多項式の係数を
結果があたりさわりのない誤差範囲でうろうろするように調整してあるんだろJK、

596 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 01:51:27.40 ID:L6Vpkxay.net]
やっぱ>>562というものが>>559の誤差の真相なのではな
いか

597 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 02:32:05.49 ID:7UdZ08Kf.net]
>>588
結果見たけど、sin_valの値は、きっちり0から10000になったときに5桁精度悪化してるし、100000で6桁精度悪化してるのでは…?

598 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 07:31:31.40 ID:xtSEOuqd.net]
>>589
パッと見だけど>>565が答えじゃねえの
浮動小数点てのは文字通り小数点位置が異なる
数値が1付近と100万付近じゃ精度が異なるのは当たり前
精度を保つなら固定小数点使わないと

599 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 11:37:53.79 ID:ZhVAaRAF.net]
まだやってたのか小学生・・・ID変えてご苦労様

600 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 11:39:17.39 ID:ZhVAaRAF.net]
何度も言ってるが>>560でこの話は終了している

601 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 12:38:33.70 ID:A3EHubzP.net]
質問主が現れないからもう何議論しても無駄な気がする
ソースコードがあるわけでもないし

100万程度で誤差ヤバい言うぐらいだからfloatで計算してないか疑たくもなる

602 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 14:43:33.58 ID:Wt/MKF34.net]
誰も計算機上のゼロについて理解できてない



603 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 16:49:59.36 ID:uaiyfMI5.net]
もまいら、浮動小数点のゼロ判定どうしてる?

604 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 00:22:01.38 ID:kcosmPcn.net]
vectorでクラスへのポインタを持ってて、それを参照で受け取る関数を作るとき、クラスの変更を禁止したいんですが、どうすればいいですか?

例えば、
struct testclass{
int member;
};
というクラスがあって、
vector<testclass*>
を参照渡しで受け取る関数を作るとき、引数をconst vector<testclass*>& vecとしてもvec[0]->member =0みたいなクラスのメンバ変数の変更は関数の中で出来てしまうと思うのですが、そういうのをできないようにしたいです(testclassの変更が無いことを関数宣言で保証したいです)
何か良い方法ありますか?

vectorが1重であればtestclass const*const*を引数にすればいいとは思うのですが、vector<vector<testclass*>>のように多重vectorみたいな場合も作りたくて、そのときは関数を呼ぶ側で多重vectorから多重配列に変換するのは面倒なので、できればvectorではなく配列を使うというのはしたくないです

605 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 00:36:47.69 ID:ysmsTKqS.net]
>>597
禁止しない
もしくはメンバ変数を非publicにしてgetter/setter

606 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 05:02:18.38 ID:zF3P5q1E.net]
だから絶対値が1e-14とかより小さいかどうかだって

>>585なんかは全く理解してないようだが

607 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 05:10:34.66 ID:zF3P5q1E.net]
ちなみにsinがゼロのとこは微分が1か-1でsinが1のとこは微分がゼロだから違うってのは、事実だが今回の事象の説明としては感覚的に過ぎるね

なぜならf(x) = xなる関数は微分は1だが f(1000000.3575642) は14桁正しいw

sinの挙動について理解したいなら実装に踏み込むしかないよ
あるいは>>576あたりで思考停止しとくか

608 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 06:37:46.15 ID:qJZ2APUI.net]
>>597
アクセスを厳密に禁止したいなら、配列操作のみ定義したラッパークラスを用意して渡したほうが良い。

609 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 08:06:29.68 ID:FnYy2lty.net]
んだね

610 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 08:45:47.76 ID:FPee+d5o.net]
クラス T のメンバ関数で自身のコピーを返す(つまり返り値の型が T)ものを考える
メンバ関数の修飾が && のときは std::move(*this) とかしたいけどこれはいちいち書かないとダメ?
普通は std::forward で統一できるが

611 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 09:05:22.16 ID:FnYy2lty.net]
*thisはxvalueではないからムブコンに渡したければstd::move()か(T&&)がいるね

612 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 11:52:30.35 ID:kcosmPcn.net]
>>598
ありがとうございます
ただ、
>メンバ変数を非publicにしてgetter/setter
これだと結局setterでメンバ変数を変更できてしまいますよね?

>>601
ありがとうございます、検討してみます



613 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 14:47:55.66 ID:fEOKhR13.net]
instance.field; が暗黙のうちに書き変わらないだけでも効果あるんだよ

void f(T&t){ t.clear();}
f(instance.field);
うっかりこんなことしたらヤバいし

const T& get_field() const;
を使っとけばコンパイル時エラーにしてくれる

>>597 冒頭の質問なら、参照渡し引数に
void f(const T&);
のようにconstつけとけばいい

614 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 15:16:00.18 ID:7kXupeFa.net]
>>597
まだ標準に入ってないけど、propagate_const使うとか
https://ideone.com/O8a0hn

615 名前:デフォルトの名無しさん [2022/01/04(火) 07:21:58.04 ID:5hvio7Nh.net]
Packtpubが不安定になってるんだけど。
見れますか?

616 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 21:49:37.99 ID:2R8vvmqQ.net]
クラステンプレートについて、明示的実体化しておけば実装を.cppでもできるというのを知ったのですが、その場合、テンプレートでない普通のクラスと同じように
部分的にヘッダに実装を書いて、残りを.cppに書く、というのは正式な書き方として許されるでしょうか?

617 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 22:24:10.67 ID:tiBxT68+.net]
許される。

618 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 22:48:02.56 ID:2R8vvmqQ.net]
>>610
ありがとうございます!

619 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:12:35.27 ID:C9LB+2SX.net]
その昔、exportテンプレートというのがあってだな

620 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:07:55.52 ID:UgPywUlD.net]
class T;

class C {
public:
T t;
};

とあったとき

C c{T()};

と集成体初期化を行うと T のコンストラクタが1回だけ呼ばれます
メンバ t をカプセル化してコンストラクタを自分で用意するとどうやっても T のムーヴコンストラクタが余計に1回呼ばれてしまうと思ったのですが回避する方法はありますか?

621 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 02:01:17.79 ID:uUhimsKL.net]
>>613
直接的にはないけど
optionalとかvariantにあるin_placeコンストラクタと同じことをすればTのコンストラクタ呼び出しは一回で済みそう

622 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 20:51:50.26 ID:UgPywUlD.net]
>>614
ありがとうございます!



623 名前:デフォルトの名無しさん mailto:sage [2022/01/09(日) 10:55:01.80 ID:7BGFeByJ.net]
>>597
配列の定義を vector<const testclass*> にすればよくない?

624 名前:デフォルトの名無しさん mailto:sage [2022/01/09(日) 11:30:20.08 ID:BcvcYHng.net]
外では変更するけど関数内では変更しないことを明示したいんでしょ

625 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 09:32:50.44 ID:kvnPCGqB.net]
関数の定義で
auto foo() -> void{}
みたいに書くの見かけたけどこのやり方何かメリットありますか?

626 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 12:16:01.64 ID:SK9+pElf.net]
あるね
auto s = std::string{"test"};
みたいな宣言とかも

627 名前:デフォルトの名無しさん [2022/01/12(水) 12:26:17.78 ID:Z0p/7uhd.net]
>>618は型推論効いてないやん

628 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 12:28:40.33 ID:VUzGdiiG.net]
戻り値の型を->の先に書いてあるだけだよ。
だからこれはvoid型の戻り値ね。

利点は引数からdecltype使って戻り値の型を指定できるくらいじゃない?

629 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 13:45:01.07 ID:uq5/9jO3.net]
https://www.fluentcpp.com/2018/09/28/auto-stick-changing-style/

この記事で論じられているね

630 名前:はちみつ餃子 mailto:sage [2022/01/12(水) 13:59:43.98 ID:7Sv8jpqL.net]
ラムダ式で返却値の型をどう書くかというのが後置スタイルを導入した直接の動機だと思う。

普通の関数で後置にするメリットがない場合であっても、
メリットがある場合とない場合で区別して使い分けるよりは全部を後置で一貫させたほうが綺麗だと思うこともあるだろ。

631 名前:デフォルトの名無しさん [2022/01/12(水) 17:10:39.04 ID:VRtGvzgV.net]
みずほが復旧をあきらめるとかどうみてもfukkyu

632 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 18:43:03.08 ID:NICGWYWs.net]
人がつくったものネットから持ってきて何個も組み合わせて合体させるとみずほみたいになるんだろうな
自分で作ってない部分はメンテしようがないからな



633 名前:デフォルトの名無しさん [2022/01/12(水) 19:53:35.19 ID:UH3nST5b.net]
Windows serverにしたのが最大の間違い。

634 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 20:51:55.49 ID:VUzGdiiG.net]
std::stringの大文字を全て小文字に変換するのってstd::transformより良いものあるの?

635 名前:デフォルトの名無しさん [2022/01/12(水) 22:50:55.12 ID:VRtGvzgV.net]
Windowsで文字列中の大文字を小文字に変換する_mbslwr()って今やランタイムで使えなくなってんだね、知らんかったわ

636 名前:蟻人間 mailto:sage [2022/01/12(水) 23:14:22.56 ID:htST1fFk.net]
CharLower
CharLowerBuff

637 名前:デフォルトの名無しさん mailto:sage [2022/01/13(木) 21:50:13.52 ID:bN4t5i1e.net]
c++のexe → ライブラリA(c++のdll)

c++のcリンケージのdll → ライブラリA(c++のdll)

同じライブラリの同じ関数を呼び出してるのに
呼び出し元の形態によって挙動が変わるなんてこと有り得ますか?

638 名前:デフォルトの名無しさん mailto:sage [2022/01/13(木) 22:14:06.74 ID:+PFReeTS.net]
ライブラリも呼び出し元も外部の同名のdllをリンクしているけれども
呼び出し元が参照しているdllの実体が別だったとか。

639 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 09:16:33.28 ID:ovvIshUS.net]
struct Vector2 { float x, y; };のような64bitで済んでしまうものの計算にSSE命令を使っても高速化は見込めないのでしょうか?
上記に対して_mm_mul_psを行うと上位2float分を余計に計算させることになってしまいますよね

640 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 05:56:06.60 ID:ps658RNN.net]
>>603
deducing thisがC++23で入るね

641 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 16:29:52.27 ID:fx8S/FAM.net]
>>632
余計に計算させるけど一命令で済むよ
ただし速度以外のデメリット出てくるけど

642 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 12:31:04.34 ID:20f7Ghpo.net]
>>630
同じ関数というのが関数名と引数の数が同じというだけなら
extern "C" double sqrt(double x);
extern float sqrt(float x);
とから有り得る



643 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 15:18:31.08 ID:sD13NBSV.net]
pair<int, int> の first と second に、例えば座標と向きのような意味をもたせてるとします
このとき、using なんかを使って pair<int, int> x の第一要素と第二要素に x.pos、x.dir のようにアクセスする方法ってありますか?

644 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 15:34:47.07 ID:jU2WrI4n.net]
>>636
C++ ではメンバ (のように見えるもの) を後から生やすことは出来ない。

645 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 16:04:32.58 ID:+6BKuldY.net]
auto& [x, y] = obj;
x = 100;
y = 100;

動くかは試してない

646 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 16:07:55.78 ID:h5bglXe3.net]
>>636
そういうあちこちで使う用途の、はっきり意味が決まった構造体は
pairやtupleに頼らない方が(大抵の場面では)便利だよ
その一箇所でしか使わないならpairでいいと思うけど

647 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 16:18:00.13 ID:jU2WrI4n.net]
いくつかの要件を満たして "Tuple-like" であるようなクラスはタプルのように扱える仕組みがある。
タプルを多用途に使うよりは個別のクラスを作った上でタプルのインターフェイスを持たせるほうが
使いやすくなると思う。

648 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 16:55:14.33 ID:aOF99LGB.net]
>>636
まず構造体を勉強しよう

649 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 17:09:52.53 ID:bBHBfELI.net]
struct だと困るんですか?

650 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 17:35:43.45 ID:AdXHrviP.net]
みなさん御機嫌よう
このスレには何度も助けられているものです
再度お知恵を拝借したいです

任意のユーザー定義型のインスタンスhogeが、基底クラスbaseを継承しているか調べたいです。
この一例のみならtypeidで合致させればいいと思うのですが、実際は派生クラスが200くらいある予定です。
type-traitでインクルード出来るstd::is_base_ofで、RTTIを使い判定しようとしたのですが、typeidで取得できる型で合致させようとしたところ型情報が合いません……orz
どんな方法でもいいので何かいい方法がございましたらご教授いただければと思います。

class base{};
class driv:public base{};
class foo{};

//もしhogeがfoo型のインスタンスなら偽を、drivのインスタンスなら真を返したい関数
bool exHantei(){}

651 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 17:43:03.78 ID:jU2WrI4n.net]
老眼なので Hantei が Hentai に見えた。

652 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 17:49:59.30 ID:jU2WrI4n.net]
>>643
静的な型を判定するならこういうのでいけると思うが、
RTTI が出てくるってことは状況が違うのかな?

#include <iostream>
#include <type_traits>

class base{};
class driv : public base{};
class foo{};

template<class T>
bool exHantei(const T&){
return std::is_base_of<base, T>::value;
}

int main(void) {
driv hoge;
foo huga;
std::cout << exHantei(hoge) << std::endl;
std::cout << exHantei(huga) << std::endl;
}



653 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 20:3 ]
[ここ壊れてます]

654 名前:6:31.89 ID:PMmhhAT1.net mailto: dynamic_cast<base*>(hoge)がnullptrかどうかを見ろ []
[ここ壊れてます]

655 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 20:47:22.64 ID:6BYLlYWJ.net]
>>643
bool exHentai(){
return std::is_base_of_v<base, std::remove_reference_t<decltype(hoge)>>;
}

656 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 20:49:09.31 ID:AdXHrviP.net]
>>645
ありがとうございます。
ただ今これで動作確認はしました。

が本来は基底クラスのポインタに格納されているのです……
書き込む時に蛇足と思って省いてしまったのですが、実際は
class base{};
class driv:public base{};
class WantToFind:public driv{}
std::vector<base*> VecBasePtr;
void pusbak()
{
WantToFind f1;
VecBasePtr.push_back(&f1);
}
というようにベースポインタに押し込んで使っていて、exHantei()を使用する時にはベースとこのポインタを比較することになります。
今はちみつ餃子様のコードで動作確認をした後、自分のコード用に書き直したところ、ポインタから型を取得させる動作ができません(泣)
てっきりtypeidと同じ様に、exHantei(*VecBasePtr[0]);と*を付けてポインタの中身を外に出せば生のWantToFind型が出てくるかと思ったのですが……
思い通りの動作が出来ませんでした。
どうしてなんですかね、、、
デバッグモードで確認してもわからない
もちろんbaseに仮想関数は置いてあるので、RTTIで動作してくれるものと思っていましたが。
Templateの機序が違うのかな……?

657 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:03:17.46 ID:PMmhhAT1.net]
だからdynamic_castで調べろって
そのための機能だから

658 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:36:21.92 ID:AdXHrviP.net]
>>649
ありがとうございます!!!
確認しましたところ自分の思っている動作が得られました☆*:.。. o(≧▽≦)o .。.:*☆
こんなに簡単に出来るとは、is_base_ofの使い所さんはどうなってしまうんだ。。。

レスへの返信を書きながら、自分でもコード確認やリファレンスを検索していたため、スレの確認が遅くなってしまい、多くの型と行き違いになってまいました。
返信をくださった方々には重ね重ねお礼申し上

659 名前:げます。
まだまだ弱輩者ですが、これからも生暖かい目で返信くださると幸いです。
皆さんありがとうございます!
[]
[ここ壊れてます]

660 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 21:36:54.84 ID:jU2WrI4n.net]
>>648
動的型で継承関係を確かめるなら >>646 が述べている通り dynamic_cast で実際に変換してみるのは手っ取り早い方法だと思う。

> 生のWantToFind型が出てくるかと思ったのですが……

「生の」ってなんやねん。
その場合の *VecBasePtr[0] の静的型はあくまで base だよ。
オブジェクトの base である部分 (サブオブジェクト) が取り出される。
いわゆるスライシング。

661 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:37:50.95 ID:AdXHrviP.net]
dynamic_castは知ってたはずなのに思い出さなかったというか思いつかなかった……

662 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:46:56.12 ID:AdXHrviP.net]
>>651
ありがとうございます。

自分はスライシングもちゃんと理解してないですね……
ポインタのメモリ確保サイズが一様に8バイト(4バイト)なので、基底型が派生型の型を丸ごと格納している(派生型のポインタを確保している)と理解していました。。。(*を付けると派生型が出てくる)
悪魔でも基底型なのですね?
キャストで受けるまでは基底型として扱われるので、型情報が合致しなかったのかな。
type_infoは、全く別の型を型合致に使うから*baseが有効なのかな。



663 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:55:40.15 ID:h5bglXe3.net]
dynamic_castって仮想関数テーブル必要じゃなかったっけ?
まぁいずれにせよ仮想関数テーブルでぐぐればそこらへんの理解が進むと思う
多分

664 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 17:29:06.73 ID:u/w202Yd.net]
スライシングとか知らない単語使わないで

665 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 18:16:17.94 ID:oZ05fVjC.net]
用語って大事だよな
言葉遣いがおかしいの指摘されると逆ギレする
DQN気質なやつが残念ながら後を経たない

666 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 05:34:44.25 ID:tJtJ60TC.net]
https://cpplover.blogspot.com/2018/07/c20.html?m=1
汎用エイリアス宣言の提案ってどうなったんだろう

667 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 09:07:39.69 ID:PFfSIkf2.net]
#include <cctype>
//#include <string>

template <typename F>
void test(F&& f){}

int main(){
test(std::isprint);
}
これ<string>を有効にするとcouldn't deduceになるんだけど
なんで?

コンパイラはMSYS2 g++ 10.3.0

668 名前:デフォルトの名無しさん [2022/01/20(木) 09:24:47.83 ID:MuVW7weO.net]
名前衝突してんじゃないの?

669 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 09:37:40.24 ID:PFfSIkf2.net]
<locale>のテンプレートが干渉してるっぽいことはわかった
これ、俺の落ち度なの?

670 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 13:32:22.34 ID:NzUGMacM.net]
>>660
オーバーロードやデフォルト引数が追加される可能性があるから、
一般的に標準ライブラリ関数のアドレスは取れないと思ったほうがいい。
https://isocpp.org/std/standing-documents/sd-8-standard-library-compatibility

671 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 18:29:19.36 ID:PFfSIkf2.net]
ぐぶー・・・

672 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 22:37:24.73 ID:Df2OyNH0.net]
ランタイムサポートが必要なC++言語機能ってRTTIやdynamic_cast、例外くらい?



673 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 23:29:32.85 ID:a5eQ4sV9.net]
そもそもランタイムサポートの定義をちゃんとしないとな・・・

674 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 00:00:01.47 ID:/d5tBos9.net]
RTTIも例外も標準C++の一部
それが使えないような設定は厳密には規格違反だし、それで高速化や効率化しますってのは各コンパイラの独自機能に過ぎない

675 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 01:04:31.52 ID:VVQk5y8F.net]
アホすぎるw

676 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 07:18:18.80 ID:j/G12RQ8.net]
dynamic initializationも裏で色々やってるね

677 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 07:28:47.34 ID:VVQk5y8F.net]
とりあえずOSないところか、簡単な仕組みしかないところでC++で何か書いてみればいいよ
処理系が何をしてくれているのか分かる

678 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 07:43:11.40 ID:j/G12RQ8.net]
ベアメタルはオモロイ

679 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 07:59:33.55 ID:j/G12RQ8.net]
658だけど、自己解決の報告。
テンプレートにしないで
void test(int(*f)(int)){}
にしたら<locale>のisprintが干渉しなくなった
最初の発想がいかんかった

680 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 08:26:30.46 ID:VVQk5y8F.net]
isprintのテンプレート引数が決まらないからだろ
test(std::isprint<int>);
とかなら通ると思う

681 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 08:32:03.82 ID:VVQk5y8F.net]
compiler explorerのarm g++ 10.3で確認した。ヘッダはlocaleにした。
#include <locale>
template <typename F>
void test(F&& f){}
int main(){
//test(std::isprint);
test(std::isprint<int>);
}

682 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 08:47:07.93 ID:VVQk5y8F.net]
元のコードをなるべく変えずにだと
#include <string>
#include <cctype>
template <typename F>
void test(F&& f){}
int main(){
test(static_cast<int (*)(int)>(std::isprint));
}
※オーバーロードを選択させるべくキャストする



683 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 09:54:53.25 ID:j/G12RQ8.net]
conceptでテンプレートテンプレート引数を弾いたりできないかとも思ったけど
SFINAEは関数の除外なので引数の候補を絞るのは無理だった

684 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 10:28:58.52 ID:om6KWGu4.net]
class A { static inline struct SubStruct { int value; } Field1; } //通常の構造体のスタティックメンバ変数はヘッダファイル、cppファイル共に実体は同じ
class A { static inline struct { int value; } Field1; } //無名構造体のスタティックメンバ変数はヘッダファイルとcppファイルとでそれぞれ別の実体が生成されアドレスが異なる

この挙動は仕様なのでしょうか?

685 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 10:57:07.60 ID:OQdcFc3P.net]
名前書き忘れて0点取ったことないのか

686 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 11:38:04.16 ID:+VFNw8nk.net]
今だと仮想関数とvariantとどっち使うのが主流ですか?

687 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 11:49:22.43 ID:XNgWTOyh.net]
>>675
名前のない構造体には実体がなく外部リンケージを持たないのでそこに対するinline指定は無視されるってことでは?
分かりにくいけど仕様として矛盾してはいないと思う

688 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:06:33.51 ID:BllOBQpy.net]
>>675
「ヘッダファイルとcppファイルとでそれぞれ別の実体が生成されアドレスが異なる」という状態をどうやって観測しているの?
そんな挙動しないと思うんで、観測方法に間違いがありそう。

>>678
名前のない構造体もクラス型としては存在するし、それとは別に変数 A::Field1 は外部リンケージを持つよ。
https://timsong-cpp.github.io/cppwp/n4861/basic.link#5
> In addition, a member function, static data member, ..., has the same linkage, if any, as the name of the class of which it is a member.

689 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:08:52.36 ID:BllOBQpy.net]
>>678
あと仮にinline指定が無視されたとしても「別の実体が生成される」というような動作には繋がらないね。

690 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:59:06.18 ID:0LC8SyT+.net]
>>599
アーハン?
doubleで表現可能な最小の数と1e-14の大小関係もわかんない人なんですかね、、、

691 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:05:40.45 ID:0LC8SyT+.net]
>>593
その2π周期というのが厳密に2*M_PI周期であることの根拠は?
>>560の時点ではそれは示されていなかった
>>588で2*M_PI周期と言う実験結果がデタ

692 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:11:22.71 ID:0LC8SyT+.net]
>>596
万能の一般論は無い(キリ
なぜなら、f(x)が0かどうかの判定をしたいとして、±|處を0とみなすべきなのかは
f(x)の精度に依存するから
ただし、>>560式に f(x1) と f(x2) の等値判定なら >>560式にやりうる
これは f(x1) - f(x2) のゼロ判定として>>560式にやればよろっし



693 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:15:01.32 ID:0LC8SyT+.net]
アンカーミスった;;;orz
s/>>560/>>588/g

694 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 16:12:55.51 ID:13b+4FON.net]
>>681
O(1) の数値を使って計算してたら例えば 1e-15 以下の数値をゼロと見なすとかするより他ないでしょ
バカ?

695 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 16:30:03.25 ID:OQdcFc3P.net]
sedかよ

696 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 16:59:40.11 ID:gWLf+Bka.net]
知らなくて驚くかもしれないけどdoubleは1e-324も表せちまうんだ

697 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 17:34:26.32 ID:UJcbhjLZ.net]
>>681-687
まだやってたのか小学生・・・ID変えてご苦労様
何度も言ってるが>>560でこの話は終了している

698 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 17:48:02.61 ID:vZsc1PCZ.net]
>>687
そこまで拗らせてる事に驚いたわw

699 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 19:34:50.12 ID:DSkywrpw.net]
>>560
>100万をsin()しても、sin()は2π周期
>doubleの精度15桁中の5桁以上を無駄にしている

これよくわからん。

700 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 20:03:51.19 ID:0LC8SyT+.net]
言ってる当人もわかってないんだろJK

701 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 20:37:14.45 ID:0LC8SyT+.net]
double sin(double x)の精度が±10E-10程度らしいことは>>588の結果が示しているが
こっれはxが100万かどうかによらないことも結果が示してゐる
実装を見ないとわからんが、多分マクローリン展開の打ち切りによる誤差とみるべき

702 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 21:05:23.18 ID:yfbq4hUz.net]
>>692
実装見てから言った方がいいよ。マクローリン展開というが、0を基準にマクローリン展開してるわけないだろ。



703 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 21:18:55.93 ID:0LC8SyT+.net]
>>685
その方法は等値判定として一貫性が無いからNG
double x = 2.0;
double y = 2.0 + (10E-15) / 2.0;
assert(fabs(x - y) <= 10E-15); // pass. 10E-15基準で x == y とみなされる
assert(fabs(100 * x - 100.0 * y) <= 10E-15); // fail。 10E-15基準の下で 100 * x と 100.0 * y はイコールにならにあ

704 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 21:22:04.30 ID:0LC8SyT+.net]
>>693
sin(x)の場合は|x|<<1においてsin(x) ≒ xなのでsin(x+a)を展開をする際のaを0にするのが妥当に思えまっする、

705 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 04:16:28.14 ID:QgynSmAQ.net]
>>689-695
まだやってたのか小学生・・・ID変えてご苦労様
何度も言ってるが>>560でこの話は終了している

706 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 09:39:04.54 ID:CWW/bMN0.net]
>>678
挙動としては正にそんな感じですね

>>679
test.hにあるinline void 内でprintf("%p\n", Field1)、test.cppのvoid Func1内で同様の事をして確認しました
出力のみならず、そもそもヘッダのinline void内でField1に値をセットしたはずなのにソース内ではデフォルト値のままで動作が狂ったので上記のテストをして発覚した次第です
structを名前付きにするかしないかの一点だけで上記の結果が変わります

707 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 09:40:35.92 ID:CWW/bMN0.net]
>>697
printf("%p\n", Field1)はレス間違いでprintf("%p\n", &Field1)で実験しています

708 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 10:41:30.96 ID:QgynSmAQ.net]
#include<iostream>
struct A{static struct SubStruct{int value;} Field1;};
A::SubStruct A::Field1;
int main() {
std::cout << std::hex << &A::Field1 << std::endl;
return 0;
}
無名で実体の定義なんてできんのか?

709 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 10:43:19.72 ID:vZkrAotW.net]
キャストやconst&でできるな

710 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 10:47:03.39 ID:QgynSmAQ.net]
>>700
どうやんの?上の例でやってみてよ

711 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 10:48:14.26 ID:QgynSmAQ.net]
ちなみに上の例は無名でない構造体で、実体の定義は
A::SubStruct A::Field1;


712 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 10:51:00.92 ID:CWW/bMN0.net]
>>699
C++20だか17だかからはinlineをつける事で出来ます



713 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 10:51:47.13 ID:QgynSmAQ.net]
#include<iostream>
struct A{static struct {int value;} Field1;};
decltype(A::Field1) A::Field1;
int main() {
std::cout << std::hex << &A::Field1 << std::endl;
return 0;
}
意外とやってみたら出来たw

714 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 10:55:02.08 ID:vZkrAotW.net]
>>700

A::SubStruct{}
で実体の「定義」ができる

&A::SubStruct{}
は実体がprvalueという理由でエラーだが
実体を定義できるか否かとは別問題だ

715 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 10:57:42.35 ID:QgynSmAQ.net]
>>705
根本的に意思疎通できてないみたいだな
staticメンバA::Field1の実体定義だって

716 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 10:59:48.93 ID:vZkrAotW.net]
>>706
そのようだな
なぜstaticメンバが出てくるのか不明だ

717 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 11:04:13.16 ID:QgynSmAQ.net]
>>703
確かに出来た
-std=c++17
付けたら実体定義なくても通った

718 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 11:05:12.08 ID:QgynSmAQ.net]
コードはこんなのね(with -std=c++17)
#include<iostream>
struct A{static inline struct {int value;} Field1;};
int main() {
std::cout << std::hex << &A::Field1 << std::endl;
return 0;
}

719 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 11:25:38.49 ID:QgynSmAQ.net]
実体は同じのを指すようで再現しなかったな。MakefileはちゃんとTAB入れてな。
cat >Makefile <<EOF
CXXFLAGS += -std=c++17
sample: main.o sub1.o sub2.o
\$(LINK.cc) \$? -o \$@
EOF
cat >main.cpp <<EOF
void sub1();
void sub2();
int main() {
sub1();
sub2();
return 0;
}
EOF
cat >sub1.cpp <<EOF
#include<iostream>
struct A{static inline struct {int value;} Field1;};
void sub1() {
std::cout << std::hex << &A::Field1 << std::endl;
}
EOF
cat >sub2.cpp <<EOF
#include<iostream>
struct A{static inline struct {int value;} Field1;};
void sub2() {
std::cout << std::hex << &A::Field1 << std::endl;
}
EOF
make

720 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 15:40:28.67 ID:K/S7vg9Z.net]
>>697-698
wandbox の gcc 11.1.0 でもやってみたけど、再現せず同じアドレスが出た。
https://wandbox.org/permlink/SSg6OZD97wmgR8kq
コンパイラやバージョンやコンパイルオプションを合わせれば再現するのかね?

721 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 15:53:41.49 ID:QgynSmAQ.net]
>>711
複数のオブジェクトファイルにしないと検証できないと思うよ

722 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 16:09:46.74 ID:K/S7vg9Z.net]
>>712
>>697の説明にあるtest.cppはtest.hをインクルードしてるんだろうからこの形でいいだろうと思った。

まぁやってみたけど、変わらないね。
https://wandbox.org/permlink/hfbakWmCF1i5stqr



723 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 16:31:20.27 ID:QgynSmAQ.net]
>>713
流石にヘッダファイルから何かが生成されることはないw
wandboxで複数オブジェクトファイルって処理系内部の作り次第になるし、>>710でもやってみようかと思ったけど、3つは無理そうだね

724 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 17:20:50.76 ID:hHkcGLX7.net]
ヘッダに実装書くと管理が楽だよね

725 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 17:32:20.44 ID:CWW/bMN0.net]
>>711
検証頂いてるところ環境を明記しておらず申し訳ありません
Visual Studio 2022、C++20で発生している現象です

#include "test.h"
int main() //main.cpp
{
A::Initialize(); //printf("%p\n", &A::Field1);をするだけのstatic inline関数
A::Func1(); //printf("%p\n", &A::Field1);をするだけのstatic関数(__declspec(noinline)をし実装はtest.cpp)
}

struct名をつければInitializeの出力とFunc1の出力は一致、無名structにしたら不一致
本当に他は一切いじらずに名前の有無だけで変わります

726 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 17:54:11.09 ID:QgynSmAQ.net]
現象を再現させる最小限のコードを全セット載せないと先には進まんて
始めからそうしてればこんなにいろいろ書かずに済んでいる

727 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 18:17:03.90 ID:K/S7vg9Z.net]
>>714 wandbox でも -v 追加で as が2つ test.cpp と prog.cc と別で走ってるのまでは見た。

728 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 18:18:38.46 ID:K/S7vg9Z.net]
>>716
MSVC のバグっぽいね。おとなしく名前つけて回避しつつ、できればバグ報告しとくのがいいんじゃない。

729 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 20:02:54.49 ID:QgynSmAQ.net]
>>715
>>675で「無名構造体のスタティックメンバ変数はヘッダファイルとcppファイルとでそれぞれ別の実体が生成されアドレスが異なる」
と書いてあるが、ヘッダファイルから直接実体は生成されないよってこと
.cppなどのソースファイルからincludeされないとコンパイルしないから
(もちろんただのファイル名なのでコンパイラに

730 名前:直接ヘッダファイルをコンパイルせよと指定する事はできる)

つまりA::Field1に該当するシンボルが複数の.objに含まれた場合、同じになっているか=アドレスが同じになるか?
の検証でないと意味がない
[]
[ここ壊れてます]

731 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 20:09:37.28 ID:QgynSmAQ.net]
>>718
それは昔からgccを使ってる人は知ってるけど、そういう話じゃない
明らかに不自然な位置にソースファイルを指定して無理矢理2個同時にコンパイルする上に、引用されて3個はできない
つまり想定された使い方ではないということ
おまけに処理系やそのバージョンを複数変えられることが比較的便利なwandboxで、処理系を変えると確認が必要になるやり方はどうかと言っただけ
まあ、分かってるとは思うんだが

732 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 20:24:03.88 ID:QgynSmAQ.net]
とりあえず、710のコードでVS2019を調べた結果、再現は確認できた。
ただし、コンパイルオプション次第で現象が出たり出なかったりする。
VS2022でもないし、VSはコンパイルリンクオプションがデフォルトで大量に指定されてて確認が面倒なのでそれ以上は放棄した。
以下のコードではpermissive-オプションの有無で現象が再現したりしなかったりするが、デフォルト時だとその切替えで現象は変わらないので、一次原因ではないと思う。



733 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 20:24:36.31 ID:hHkcGLX7.net]
保守できないような書き方して自分の仕事を守る。PGの当然の権利ですよね。

734 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 20:25:06.27 ID:QgynSmAQ.net]
> main.cpp (
@echo void sub1^(^);
@echo void sub2^(^);
@echo int main^(^) {
@echo sub1^(^);
@echo sub2^(^);
@echo return 0;
@echo }
)
> sub1.cpp (
@echo #include^<iostream^>
@echo struct A { static inline struct { int value; } Field1; };
@echo void sub1^(^) {
@echo std::cout ^<^< std::hex ^<^< ^&A::Field1 ^<^< std::endl;
@echo }
)
> sub2.cpp (
@echo #include^<iostream^>
@echo struct A { static inline struct { int value; } Field1; };
@echo void sub2^(^) {
@echo std::cout ^<^< std::hex ^<^< ^&A::Field1 ^<^< std::endl;
@echo }
)
> sample.mak (
@echo CXXFLAGS = /MDd /EHsc /std:c^+^+17 /permissive-
@echo .cpp.obj:
@echo $^(CXX^) $^(CXXFLAGS^) /c $^<
@echo sample.exe: main.obj sub1.obj sub2.obj
@echo link /OUT:$@ $^*^*
)
nmake /f sample.mak
rem バッチファイルもnmakeもよく知りません。

735 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 20:34:19.55 ID:K/S7vg9Z.net]
>>721 ソース3つ以上もできるよ。 https://wandbox.org/permlink/UgIc9mFrs59059jq

736 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 20:40:05.18 ID:QgynSmAQ.net]
>>723
そういうのはプロジェクトの方針だと思うので、ここで話す内容ではないと思うよ

737 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 20:45:20.80 ID:QgynSmAQ.net]
>>725
改行と空白で違うのかよw b烽、知るかってャ激xルだけど、bりがと
bニりあえず>>710を載っけとく
https://wandbox.org/permlink/e8khwggKe00rtekJ

738 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 20:49:22.51 ID:QgynSmAQ.net]
>>723
>>727は何故だか文字が化けてたので一応書き直しとく。

改行と空白で違うのかよw もう知るかってレベルだけど、ありがと
とりあえず>>710を載っけとく
https://wandbox.org/permlink/e8khwggKe00rtekJ

739 名前:デフォルトの名無しさん [2022/01/24(月) 19:27:55.24 ID:WxnVLAIm.net]
C++11から、C++20までの変更点を解説した入門書を年末に買ったのだが(C++は書けるよ)、まだ読む気になれないw
「今更C++か、pythonでいいだろ」と悪魔が囁くw

740 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 19:42:15.63 ID:nLfFXIoN.net]
c++cliについてネットに解説している情報あまり無いですが、まとまってるサイトとかないですかね。

741 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 20:29:40.39 ID:kghIRcG8.net]
https://docs.microsoft.com/ja-jp/cpp/dotnet/dotnet-programming-with-cpp-cli-visual-cpp?view=msvc-170

742 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 08:07:34.25 ID:m+e4/QVD.net]
めずらしい
変態に興味あるとは
VisualJ++とかワケ



743 名前:ワカだったぜw []
[ここ壊れてます]

744 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 05:15:43.56 ID:DGJ/MazB.net]
1秒おきのタイマーでtmDraw()を呼んで右に伸びる四角を描くプログラムです。VSCでMFC未使用。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
OnPaint(hWnd);
break;
case WM_CREATE:
SetTimer(hWnd,1,1000,(TIMERPROC)NULL); //タイマー定義
break;
case WM_TIMER: //タイマー
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
tmDraw(hdc); //これを呼んで描画
EndPaint(hWnd, &ps);
}
break;
return 0;
}
static VOID tmDraw(HDC hDC)
{
SetDCPenColor(hDC, RGB(0x99, 0x66, 0x00)); //ここが呼ばれてるのは確認
SetDCBrushColor(hDC, RGB(0xFF, 0xCC, 0x00));
Rectangle(hDC, SIZE16(0, 0, cx++, 6)); //伸びる描画
}
最初の1回の描画はされます。タイマーでtmDraw()が呼ばれてるのは確認しています。
呼ばれて描画されてるはずなのですが、実際の画面は更新されず四角は伸びません。
windowサイズを手動で変えていくと四角は右に伸びていき更新されます。
タイマーでtmDraw()が呼ばれた時に描画だけでなく画面の更新もされるようにするにはどうすればよいですか?

745 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 06:35:00.77 ID:R08bxH5q.net]
WM_TIMERでBeginPaintはおかしいぞ
WM_PAINT専用なんだから
無効領域ないのにBeginPaintしたらあかん

[誘導] 続きはこっちでな
Win32API質問箱 Build127
https://mevius.5ch.net/test/read.cgi/tech/1639053176/

746 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 07:17:52.16 ID:T9eKedNN.net]
InvalidateRectとかGetDC〜ReleaseDCだっけ?

747 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 07:50:18.18 ID:td9ayUMw.net]
アップデートはマイクロソフトがやりたい時にやる
という基本理念を理解していないようだね

748 名前:デフォルトの名無しさん [2022/01/26(水) 09:14:18.23 ID:m89Xdimf.net]
WM_TIMERでInvalidateRectしておくとWindowsがWM_PAINT呼んでくれるからそこで描画するんだっけ

749 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 09:17:55.57 ID:qvNTvCwo.net]
そもそもこれCだろ…
WinMainから書く超基礎的コードをここで聞く頭がもうね

750 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 09:26:13.12 ID:WR8doP3S.net]
べつにアイドルループで描画してもいいんだよ
メッセージの処理さえ忘れずにピークしてこなせば

751 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 09:32:54.79 ID:g/1zEXcm.net]
>>738
スレチなのは確かだが、いちいち見下して何がしたいんだお前

752 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 09:36:18.65 ID:dkXO6/An.net]
どこにでもいるんだよ
自分より下の者をいたぶることで
安心しようとするチンピラ気質なやつは



753 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 10:21:44.17 ID:qvNTvCwo.net]
だってココ定期的に湧くじゃん
Windows使っててWin32APIの使い方聞いてくるC++ほとんど知らない自称天才のバカ
同じやつだよきっと
毎回Win32APIに誘導されてるってのにな

754 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 10:46:25.17 ID:g/1zEXcm.net]
あー、言われれば確かにそんなの居たっけ・・
でもまぁ同一人物とは限らないんだし誘導して終わりでいんじゃね
たまに見当違いの初心者は入ってくるし(DirectXスレにDirectXランタイムのインスコの仕方聞きにきた猛者が居た

755 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 10:59:27.08 ID:vhiSf69I.net]
733 すいません、そっちのスレは知りませんでした
そちらで聞き直します

756 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 11:06:01.05 ID:qvNTvCwo.net]
DirectXスレにDirectXランタイムのインスコの仕方聞くのはまだ仕方ない話
ドライバ固有の問題に当たっているなら専門家に聞いた方がいいだろう

自称天才のバカである確率の方が高いと思うし、高確率で単発IDで荒らすバカも同じだろうし、わざわざレスしてくるやつも同じだろうから、バカにはバカと言ってあげた方が親切

757 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 12:02:29.99 ID:dkXO6/An.net]
誘導ももう済んでるのに
どうしても喧嘩言葉を使いたくて沸いてくる
三下のそのまた下の家畜はいいのか

758 名前:デフォルトの名無しさん [2022/01/26(水) 13:23:53.73 ID:m89Xdimf.net]
DirectXランタイムが許されるならWin32 APIだって許してあげなよ
製品名はVisual C++だし、既定の拡張子 .cpp なんだから Win32はC++ではなくCだって言ってもしょうがない

759 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 23:06:08.50 ID:UuxYD5f6.net]
いかにも漏れは天才だが
さすがにWinMain()から書くようなバリバリWindowsアプリの質問はしないかなあ、、、
漏れの言ってることがまるで理解できない低レヴェル凡人の反発を招くことはあってもな

760 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 10:59:27.25 ID:Z+Vqme3O.net]
天才でも質問することあるんですね
回答者は超天才?

761 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 11:49:44.22 ID:avZQ9Wm7.net]
いかにも
私が超天才だが
ってどっかのハンコ貰いにいく人事のCMみたい

762 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 15:04:46.13 ID:mo0R2qbj.net]
大学の課題でコンパイルエラーになるので教えてもらいないでしょうか
main.cppで、B<A> b; b.display(); のようにAを使っています。
g++ -Wall -std=c++17 -g -o test a.cpp main.cpp
undefined reference to `operator<<(ostream&, A const&)'
※コンストラクタなどの関数定義は省略してます。
■ a.h
class A {
public:
  string m_str;
  friend ostream & operator << (ostream &os, const A &a);
};
■ a.cpp
ostream & operator << (ostream &os, const A &a)
{
  os << a.m_str << endl;
  return os;
}
■ b.h
template <typename T>
class B
{
public:
  void display(ostream &os = cout) const;
  T m_dummy;
};
template <typename T>
void B<T>::display(ostream &os) const
{
  os << m_dummy << endl; // ここが undefined referenceエラー
}



763 名前:751 mailto:sage [2022/01/29(土) 15:50:41.96 ID:mo0R2qbj.net]
失礼、自己解決しました。
namespaceをa.hだけ括って、a.cppに入れ忘れましたw

764 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 02:23:38.98 ID:iz74n4+D.net]
下の★1を★2のように書きたいんだけど、どうやって書けばいいのか
教えてぇ

#include <iostream>

template <typename T>
auto Sum(T h)
{
  return h;
}

template <typename Head,typename... Rests>
auto Sum(Head head,Rests... rests)
{
  return head + Sum(rests...);
}

template<class F,class... Args>
auto
foo(F&& f,Args... args)
{
  return f(args...);
}

int main( int argc, char *argv[] )
{
  std::cout << foo(Sum<int,int,int>,1,2,3) << "\n";//★1
  //std::cout << foo(Sum,1,2,3) << "\n"; //★2

}

765 名前:はちみつ餃子 mailto:sage [2022/01/31(月) 04:05:32.34 ID:y6tOo2ii.net]
>>753
そのようには書けない。 C++ では高階多相を許していない。

766 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 04:18:19.49 ID:o5RGUewZ.net]
なんでも適当に済ますクセ
高級言語に慣れすぎの弊害

767 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 14:49:02.61 ID:y2HjUy1l.net]
>>753
・まず、Sumを多重定義にする必要性は特にないはず
・次に、fooが関数でSumが関数テンプレートの場合、
 関数の実引数として具現しないテンプレートは渡せない

だからfooの代わりにstd::bindを使っても解決しない

・テンプレートテンプレート仮引数を使っても
 クラステンプレートしか渡せず関数テンプレートは不可

こうなるとマクロくらいしか手がない
#define foo(func, ...) func(__VA_ARGS__)

768 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 16:24:09.60 ID:4mzN2AL1.net]
戻り値のautoが決まらないってことでしょ?autoをdouble固定にしてReturnをなくせば通る
#include <iostream>
auto sum() {return 0;}
template<typename Head> auto sum(Head head) {return head;}
template<typename Head, typename... Tails> auto sum(Head head, Tails ...tails) {return head + sum(tails...);}
template<typename Return, typename... Args> Return wrap(Return (*f)(Args...), Args ...args) {return f(args...);}
int main( int argc, char *argv[] ) {
std::cout << sum(1,2.1) << std::endl;
std::cout << wrap(static_cast<double(*)(int,double)>(sum), 1,2.1) << std::endl;
std::cout << wrap(sum<int,double>, 1,2.1) << std::endl;
std::cout << wrap(sum, 1,2.1) << std::endl;
return 0;
}
// /usr/bin/g++ -fdiagnostics-color=always -g /home/user/cpp/autoreturn/sample.cpp -o /home/user/cpp/autoreturn/sample
// /home/user/cpp/autoreturn/sample.cpp: In function ‘int main(int, char**)’:
// /home/user/cpp/autoreturn/sample.cpp:10:29: error: no matching function for call to ‘wrap(<unresolved overloaded function type>, int, double)’
// 10 | std::cout << wrap(sum, 1,2.1) << std::endl;
// | ^
// /home/user/cpp/autoreturn/sample.cpp:5:52: note: candidate: ‘template<class Return, class ... Args> Return wrap(Return (*)(Args ...), Args ...)’
// 5 | template<typename Return, typename... Args> Return wrap(Return (*f)(Args...), Args ...args) {return f(args...);}
// | ^~~~
// /home/user/cpp/autoreturn/sample.cpp:5:52: note: template argument deduction/substitution failed:
// /home/user/cpp/autoreturn/sample.cpp:10:29: note: couldn’t deduce template parameter ‘Return’
// 10 | std::cout << wrap(sum, 1,2.1) << std::endl;
// | ^

769 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 20:55:29.83 ID:ExACmeMg.net]
>>753
auto Sum = [](auto head, auto... rests) { return (head + ... + rests); };

770 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 22:50:37.06 ID:67CF9RIT.net]
ラッパークラスを通せば似たようなことはできそう。

struct Wrapper_ {
constexpr static auto doit = [](auto... args) { return Sum(args...); };
} wrapper;

int main( int, char ** )
{
std::cout << foo(wrapper.doit,1,2,3) << "\n";
}

771 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 04:38:50.89 ID:X9o0BiPI.net]
クラスは不要だった。
ラムダなら通るみたいだから、 >>758 みたいに元の関数をラムダで書くか、

auto wrapper = [](auto... args) { return Sum(args...); };

みたいなラッパー関数オブジェクト通すかってあたりで足りそう。

// 最初実験してたとき、ラムダ式にしただけだとエラー出てた気がしたんだけど、今やると問題なく通る…

772 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 05:38:09.33 ID:wGiSz27Y.net]
おお、auto... なんてできたのか



773 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 07:53:40.48 ID:vPA4cgbg.net]
>>757にラムダ入れた。
ラムダはオーバーロードできずC++17の畳み込み式が必須で引数なしが表現できないが、選択の手間がない。
#include <iostream>
auto sum() {return 0;}
template<typename Head> auto sum(Head head) {return head;}
template<typename Head, typename... Tails> auto sum(Head head, Tails ...tails) {return head + sum(tails...);}
template<typename Return, typename... Args> Return wrap(Return (*f)(Args...), Args ...args) {return f(args...);}
auto lambda_sum = [](auto head, auto ...tails) {return (head + ... + tails);}; // 追加
auto lambda_wrap = [](auto f, auto ...args) {return f(args...);}; // 追加
int main( int argc, char *argv[] ) {
std::cout << sum() << std::endl; // 追加
std::cout << sum(1) << std::endl; // 追加
std::cout << sum(1,2.1) << std::endl;
std::cout << wrap(static_cast<double(*)(int,double)>(sum), 1,2.1) << std::endl;
std::cout << wrap(sum<int,double>, 1,2.1) << std::endl;
// std::cout << wrap(sum, 1,2.1) << std::endl; // エラー
// lambda版追加
// std::cout << lambda_sum() << std::endl; // エラー
std::cout << lambda_sum(1) << std::endl; // 追加
std::cout << lambda_sum(1,2.1) << std::endl;
std::cout << lambda_wrap(static_cast<double(*)(int,double)>(sum), 1,2.1) << std::endl;
std::cout << lambda_wrap(static_cast<double(*)(int,double)>(lambda_sum), 1,2.1) << std::endl;
std::cout << lambda_wrap(sum<int,double>, 1,2.1) << std::endl;
// std::cout << lambda_wrap(lambda_sum<int,double>, 1,2.1) << std::endl; // not template
// std::cout << lambda_wrap(sum, 1,2.1) << std::endl; // エラー
std::cout << lambda_wrap(lambda_sum, 1,2.1) << std::endl;
return 0;
}

774 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 22:23:26.64 ID:rdLB3H0G.net]
c++では
sz=120;
char dt[sz];
このように配列のサイズを変数の可変サイズで指定することはできないんですか?
これを実現する方法は何かありませんか?

775 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 22:43:02.67 ID:rdLB3H0G.net]
自己解決しました
しかし dt[10][d] のように2次元以上はjavaのような動的変動はできないんですね

776 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 23:27:31.22 ID:fhOfpvRh.net]
vector使わんの?

777 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 23:28:28.99 ID:hJiWfYJV.net]
配列使わんし

778 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 23:30:45.06 ID:Sh1zYLGa.net]
>>763
arrayという似たようなやつはあるが
基本的に作法が違う

779 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 10:03:42.12 ID:pPu7Tazo.net]
コンストラクタ・テンプレートでテンプレート実引数を推定させず明示的に与えるのはどう書く?

struct some_class
{
template <class A> some_class(int) {}
};

int main()
{
some_class obj<void>(1); //error
}

780 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 12:11:02.47 ID:ryNE78sg.net]
>>768
コンストラクタには明示的に型引数を渡せない

781 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 12:36:54.65 ID:pPu7Tazo.net]
そっか。。。残念
thx >>769

782 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 12:56:51.10 ID:X/91R13x.net]
ファイルサイズを取得しようとしていろいろサイトを参考にして次のようにしたのですが
std::filesystem::file_size(path)
filesystemのところに赤線が出て使用できません
これらは記述しています
#include <iostream>
#include <fstream>
#include <filesystem>
使っているのはCommunity 2019です
filesystemが使えないのはなぜでしょう?



783 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 13:02:34.63 ID:ryNE78sg.net]
>>771
filesystemが使えるのはC++17以降

プロジェクトの設定から言語バージョンをC++14(既定)->C++17に

784 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 13:34:32.24 ID:pPu7Tazo.net]
>>771
/std:c++17は指定してる?

785 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 13:43:30.57 ID:X/91R13x.net]
ありがとうございます C++17指定できました

786 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 12:49:10.84 ID:d1XPVqCl.net]
filesystemは、できればC++20モードで使いたい
file_clockまわりがC++17ではgdgdだから

787 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 13:06:35.94 ID:ovGR74Kw.net]
小文字に変換するプログラムです
string toLowerCase(const string& str)
{
string lower = str;
std::transform(lower.begin(), lower.end(), lower.begin(), std::tolower);
return lower;
}
実行するとstd::transform 一致するオーバーロードする関数が見つかりません、とか
6引数が必要です 4が設定されてます、とか出て
実行できません
これは何が問題なのでしょうか?

788 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 13:07:58.25 ID:N/NFryku.net]
tolowerが多重定義関数だからじゃね?

789 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 13:22:13.60 ID:ovGR74Kw.net]
自分では他に定義してないんですがどこで定義されてるんでしょう

790 名前:はちみつ餃子 mailto:sage [2022/02/04(金) 13:28:07.50 ID:RpLWwySn.net]
>>776
ちょうど >>658 で同じような事例が出ている。
std::tolower は cctype ヘッダと locale ヘッダにそれぞれあって
locale ヘッダのほうが関数テンプレートだし二引数なのでこの場の都合に合わない。
なんらかの方法でどれを使うのか選択する必要があり、
たとえば static_cast などが使える。
ただ、 >>661 が提示しているようにデフォルト引数が追加される可能性があったりもするので
static_cast よりはラムダ式を経由するほうが安心できるスタイルかもね。

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>

std::string toLowerCase(const std::string& str)
{
std::string lower;
std::transform(std::begin(str), std::end(str), std::back_inserter(lower), static_cast<int(*)(int)>(std::tolower));
return lower;
}

int main(void) {
std::cout << toLowerCase("abcDEfgHi") << std::endl;
}

791 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 13:35:40.02 ID:ovGR74Kw.net]
ありがとうございます ビルド通ったみたいです

792 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 13:55:24.36 ID:3M0ClPfa.net]
最近のはptr_funやんなくても通んだな



793 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 11:50:25.88 ID:DOE5sh/+.net]
template<yyy T>//yyyはコンセプト
requires !xxx<T>//xxxはコンセプト
void test(const T& a);//yyyのコンセプトを満たしxxxのコンセプトを満たさないものについて処理したい

C++20のコンセプトのrequires節って!使うと警告出るのでわざわざ否定用のコンセプト作成して対応してるんだけど、もっと簡単な仕組みない?

794 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 11:52:48.48 ID:vpksE3yJ.net]
requires (!xxx<T>)

795 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 12:04:00.17 ID:DOE5sh/+.net]
解決した!ありがとう!

796 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 20:23:31.04 ID:Irrrknzv.net]
#define FOO() 1

#if FOO
...
#endif

と書いた場合FOOの後ろに()付けるの忘れてるのでコンパイルエラーになって欲しいんですが
実際はFOOは偽に評価されてるみたいです
何が起きてるんでしょうか?

797 名前:はちみつ餃子 mailto:sage [2022/02/05(土) 20:31:08.99 ID:NEwj3nV7.net]
>>785
#if の条件の部分ではマクロ展開できるものを全部展開したあとに知らない識別子が残ったら 0 と解釈する。

798 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 20:32:57.42 ID:BHACckaU.net]
>>785
FOO に () が無いことで展開されず、マクロ展開後に残った識別子として 0 に置き換わってる。
https://timsong-cpp.github.io/cppwp/n4868/cpp.cond#11.sentence-1
> After all replacements ..., all remaining identifiers and keywords,
> except for true and false, are replaced with the pp-number 0, ...

799 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 01:29:50.60 ID:Yc7Iwiyd.net]
>>785
バカですか?

800 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 01:32:54.82 ID:3BxbnhGH.net]
#if defined(FOO)
...
#endif

801 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 01:34:05.59 ID:Yc7Iwiyd.net]
Cの基本が出来てないくせにC++を使いこなせると思うなよ

802 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 01:35:00.88 ID:H2F64OwB.net]
横からだけど知らなかった



803 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 03:28:00.08 ID:XnD7OQcd.net]
>>786
>>787
ありがとうございます
このルールは知りませんでした

804 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 06:46:34.29 ID:qvD4QsX7.net]
こういう馬鹿のためにコンパイラに無駄なルールが必要になるんだなと実感

805 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 06:55:06.64 ID:usxBX4wT.net]
エラーにならないのは理不尽だな

806 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 08:23:12.41 ID:qvD4QsX7.net]
馬鹿のためにわざわざプリプロセスで構文解析エラーを要求するとか馬鹿の極み

807 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 08:30:29.95 ID:usxBX4wT.net]
FOOが0になる根拠を与えていないだろ
関連付けられていないものが出てくるのがおかしいと思わないとしたらPG適性低いぞ

808 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 08:53:46.75 ID:2YxKeDPZ.net]
唐突に0がどうとか言い出すのはセンス無いわ

809 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 09:07:44.45 ID:HE5J2RYG.net]
初めて知った

810 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 09:24:54.74 ID:usxBX4wT.net]
>>797
>>786

811 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 09:35:58.81 ID:qvD4QsX7.net]
馬鹿は当たり前のように英語も読めない

812 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 09:36:22.76 ID:vWDceL4H.net]
なんじゃそりゃ>>799はC++規格委員会が死ね言うたら死ぬんか、



813 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 09:57:50.12 ID:vWDceL4H.net]
規格書にはなんでそうなっているのか(置換されずに残ったFOOをエラーではなく0にするのか)の理由が書かれていないが
#ifdef defined(FOO) && FOO
として現れる論理式「defined(FOO) && FOO」の解釈を簡単にやりたい(FOOが未定義の場合でも通常の式の解釈ルーチンで処理したい
的なしょーもない理由だったりして……

814 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 09:59:13.49 ID:vWDceL4H.net]
まつがえたorz
×: #ifdef defined(FOO) && FOO
○: #if defined(FOO) && FOO

815 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 10:11:26.46 ID:usxBX4wT.net]
>>801
唐突じゃないことを示したまで
事実関係をよく確認してからセンス無いとかドヤれってこと

816 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 10:16:43.48 ID:a0g451d/.net]
理由はたぶん、規格化以前に存在した実装の動作を規格違反とするのはマズいとか、
その動作に依存して #if FOO としてる既存ソースをエラーとするわけにはいかなかったとか、
そんなところだろうと思う。

マズい動作として検出したければ警告は出せるんだし。

817 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 11:57:03.48 ID:qvD4QsX7.net]
馬鹿がまだ騒いでるのかw
こういう変なコードとの対比w
$ g++ -x c++ - <<EOF
auto f = [](){return 2;};
#define f() 1
int main() {
auto i = f();
auto j = f;
return i + j();
}
EOF
$ ./a.out
$ echo $?
3
$

818 名前:はちみつ餃子 mailto:sage [2022/02/06(日) 12:12:45.00 ID:u7K67HUJ.net]
残った識別子を 0 に解釈する挙動は C89 からの仕様だから C89 の Rationale (根拠) を見たんだけど直接的な言及は見つからない。
https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BxVCLS4f8Sg5NWZmM2NjZWEtYmExMS00Y2EzLWE3ZTMtNzFmYjYwYzBiOTIw&hl=en_US
ただ、既存のコードに差し障りがないようにということは明記してある (3.8.3) ので、
その時点でそういう挙動が支配的 (かつそれに依存するコードが多かった) のだろうとは察せられる。

規格ってのは統一を図るってのが第一の目的だけど無理な仕様でまとめちゃうと誰もその規格に従わないだけなんで、
現実にそれでやっているってのも (たとえ不格好でも) 十分な理由になるんだよ。

819 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 12:26:28.98 ID:qvD4QsX7.net]
そう書かれるとC89っぽく書かないといかんのか?w
変更部分のみw
$ gcc -x c -std=c89 - <<EOF
int f(void){return 2;}
#define f() 1
int main(void) {
int i;
int (*j)();
i = f();
j = &f;
return i + (*j)();
}
EOF

820 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 12:53:10.29 ID:FF40fIFl.net]
CとC++の規格は既存コードへの忖度の塊で出来てるからな
万人の敵だったgets()を削除するのにどんだけ苦労してるのやら

821 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 13:16:26.39 ID:vWDceL4H.net]
>>806>>808
スレに乗っかったつもりにしては
#if f

#endif
というのが含まれて無いようだが?

822 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 13:22:45.35 ID:vWDceL4H.net]
>>807
C++規格委員会は無罪なのかもしれんがじゃあなんでC89以前からそうで
そういう挙動が支配的になってしまう事態になってしまったのか、と考えると
やっぱプリプロセッサの最初の設計者がサボって
プリプロセッサ式の途中でのFOOの定義/未定義判定を
define(FOO)を導入する代わりに仕様の方を弄って簡単ハックしてしまったから
のでは……



823 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 13:33:49.71 ID:qvD4QsX7.net]
コードを示しても馬鹿には伝わらない悲しみw

824 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 13:37:12.22 ID:vWDceL4H.net]
>>812
天才にもわかるようにkwsk

825 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 13:39:17.55 ID:qvD4QsX7.net]
天才は自力でなんとか出来るし、他人を信用しないことも多いから、基本的に質問とかする機会がない
アイデアレベルの話のみ

826 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 14:11:31.07 ID:Yc7Iwiyd.net]
(σ゚ω゚)σゲッツ
stdioのバッファ使うヤツ殆ど失敗作

827 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 14:22:31.03 ID:yFNvdNoT.net]
#define マクロは単純置換のやつと関数形式のやつがある

#define A(a,b)
A();A(1);A(1,2,3);A(1,);A(,2);A;

結構めちゃくちゃなことやってもプリプロセスはエラー吐かない

引数足りないとか関数形式マクロの括弧がないのは意図しない使い方だろうからエラーにしてもらいたい気持ちはわかるが

というか<<802で言及されてるけど#if UNDEFINEDも非推奨にしてほしいわ
#define DEBUG
#define DEBUG 1
#define DEBUG 0
//#define DEBUG (undefined)
これらの全部のケースに対応できてねーし
#if DEBUG+0 とか書けとでも?

828 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 15:06:24.27 ID:qvD4QsX7.net]
俺のコードのg++やgccをcppに変えればプリプロセスの結果が出るよw オプション引数に-Eを付けても可w
別に不思議でも何でもない結果が表示されるw
$ cpp -x c++ - <<EOF
#define A(a,b) expanded
A();
A(1);
A(1,2,3);
A(1,);
A(,2);
A;
EOF
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "<stdin>"

<stdin>:2:3: error: macro "A" requires 2 arguments, but only 1 given
<stdin>:1: note: macro "A" defined here
A;
<stdin>:3:4: error: macro "A" requires 2 arguments, but only 1 given
<stdin>:1: note: macro "A" defined here
A;
<stdin>:4:8: error: macro "A" passed 3 arguments, but takes just 2
<stdin>:1: note: macro "A" defined here
A;
expanded;
expanded;
A;
$

829 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 16:46:37.28 ID:XnD7OQcd.net]
インクルードガード書くときも単に
#define FOO_HPP
とするのと
#define FOO_HPP 1
と1にするのがあるがどちらが良いとかあるんだろうか

後者の方がconstexpr if文などのC++の言語機能と組み合わせて使えるというメリットがありそうだが

830 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 16:54:43.06 ID:W01LuusE.net]
今から新規に書くなら #pragma once 一択

831 名前:はちみつ餃子 mailto:sage [2022/02/06(日) 17:09:14.27 ID:u7K67HUJ.net]
>>818
私自身は前者にしてる。
インクルードしたことを示すためのフラグとしてのマクロが必要なら
(そういう事例に遭遇したことはないが) ガード用とは別にマクロ定義すると思う。

ガードのために定義したものをガード以外の目的で使うというのがちょっと汚く感じるから。
だけど分けちゃうと管理が二重になるのが嫌だと思う人もいるだろうし、
思想によるんじゃないの。

私は規格厨なので #pragma once は使わない。
まあ gcc と clang と msvc で使えるから事実上は問題にならないけど。

832 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 17:25:15.43 ID:XnD7OQcd.net]
>>820
ありがとう
納得できる理由です

インクルードガード以外のフラグも同様にしてますか?
標準のNDEBUGのように



833 名前:はちみつ餃子 mailto:sage [2022/02/06(日) 17:46:04.51 ID:u7K67HUJ.net]
>>821
NDEBUG は「デバッグモードとそうでないモードを切り替える」というのがその用途なので
それに沿うと思ったら分けずに NDEBUG を使うことはあるよ。
でも「NDEBUG の用途は assert の有効・無効の切り替えなので他に使うべきでない」と認識している人がいてもおかしくない。

規格に書いてあるのはこの場合はこうだという規則だけなので
抽象的な部分での意味の捉え方は人によってかなり幅がある。
そのあたりは文脈を察して常識的判断でやっていくしかないし、
チームでやってるなら話し合うしかしょうがない。

このへんはそんなにスッパリと判断基準を設けられるようなもんではないと思う。

834 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 19:09:51.99 ID:qvD4QsX7.net]
MS発祥のモノが嫌われてるだけとも思うw

835 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 19:46:48.16 ID:XnD7OQcd.net]
>>822
質問の意図がわかりにくくてすみません
自前でフラグ書くなら
>>818の前者と後者どちらを使うのかが知りたかった

836 名前:はちみつ餃子 mailto:sage [2022/02/06(日) 20:08:36.06 ID:u7K67HUJ.net]
>>824
基本的には前者。
フラグとしてのマクロで分岐するときは #if よりも #ifdef (または defined) を使うようにしてる。
マクロは型を付けられないからそうすることで ON/OFF のどちらかであって内容に意味はない
ことを明示してる感じを出したいと思ってる。

837 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 20:55:43.12 ID:XnD7OQcd.net]
>>825
改めての回答ありがとうございます

こういう一見どちらでも良いものであっても裏の考えや意図が聞けて面白かったです

838 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 06:01:51.26 ID:a2THiWt1.net]
#pragma onceを標準に採用すればええのに
これだけ需要あるのに長年ずっと放置状態
何がそん

839 名前:なに問題なんだろう []
[ここ壊れてます]

840 名前:はちみつ餃子 mailto:sage [2022/02/07(月) 09:54:39.71 ID:T4nofIq4.net]
現行仕様での理屈の立て方としては #include の効果でコードに一体化してから内容の解釈が始まるので
インクルードに干渉する余地がない。
現実にやってるんだから出来るのは間違いないんだけど理屈を根本から変えることになるし、
モジュールが上手くいけばどうでもよくなることに手間をかけたくないんじゃないかな。

841 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 11:19:39.20 ID:3u4X3WRg.net]
シンボリックリンクで別のパスになってたりとか、同じ内容の別ファイルとか、ファイル名違う中身同じファイルとか、日付だけ違う別ディレクトリの同じ内容のファイルとか
そんなの考えたくないよなーw

842 名前:はちみつ餃子 mailto:sage [2022/02/07(月) 11:53:54.22 ID:T4nofIq4.net]
名前と実体をどう対応付けるかは今でも処理系定義なのでそこらへんはあまり問題にならないと思う。



843 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 11:56:53.41 ID:XrnUHtPA.net]
そこで#pragma onceはヘッダファイルそのものをインクルード済とみなすのではなくて
定義されている内容を定義済みと記憶するのが妥当な動作
なんだけど以下のような場合に困るという、
"a.h"
struct Foo {

"b.h"
  int m_x;
  double m_y;
};

"c.cpp"
#include "a.h"
#include "b.h"

やっぱモジュールにしたら同じような実装で完全な解決になるのだから待った方が、

844 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 12:22:03.46 ID:XrnUHtPA.net]
現行の
#ifdef _FOO_H_
#define _FOO_H_
....
#endif
はヘッダファイルをインクルード済みか否かではなく
マクロ_FOO_H_が定義済みか否かを問題にしているのである意味モジュールに近い
#pragma onceは現行のマイクロソフトのやつはヘッダファイルをインクルード済みか否かを問題にしているので
何をもって同一のヘッダファイルとみなすのかという解釈の揺らぎの影響を受けてしまうまインクルードの挙動が、

845 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 12:25:19.77 ID:3u4X3WRg.net]
>>830
だからどう転ぼうと中身で決められる昔ながらの方法の方が結果が明確ということw

ちなみにgccは
シンボリックリンク→ガード
同じ内容・日付・名前、別ディレクトリの別ファイル→ガード
同じ内容・名前、別日付、ディレクトリの別ファイル→インクルード
同じ内容・日付、別名前、ディレクトリの別ファイル→インクルード
みたい

846 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 12:42:43.58 ID:OoGLA1C8.net]
MSの手抜き仕様まで合わせる必要なし

847 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 12:56:32.61 ID:3qCWHTEM.net]
でもCに代わってC++が広まったのはMSのおかげじゃん

848 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 13:10:46.99 ID:a2THiWt1.net]
ビット数多めのハッシュにしとけば
例えば衝突確率340澗分の1とかにできるよな

849 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 12:59:20.15 ID:ioLTStxt.net]
64bit osでポインタ型を4byteにするにはどうすればいいんですか?
8byteだとちょっと大きすぎる気がします

850 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 13:03:37.90 ID:IwR5waiE.net]
なぜ大きすぎると思ったのかが分からないが、64bitのアドレス空間を表すのに8 byteは必要だよ

851 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 13:08:06.15 ID:PzVUb2uc.net]
>>837
貧乏くさすぎ

852 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 13:19:23.53 ID:eAgudC7+.net]
64bit WindowsOSなら32bitアプリにすればok



853 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 13:40:55.45 ID:ioLTStxt.net]
例えば64bitの場合アドレスの上位4byteを一意に決めといて下位4byteを4byteの変数に格納しておくってやり方なんてはどうですか?
それで復元時には
(上位4byte << 32) & 下位4byteっていうふうに変換するってふうになると思うんですが
まず最初に上位4byteが一致した連続したメモリ領域から決まってメモリを確保するなんてことはできるのでしょうか?

854 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 13:52:00.55 ID:USCqmiY8.net]
必要なメモリをvector<X>で確保しておいて32bit以下のindex値でアクセスすることにすれば?

ポインタのサイズが大きすぎるなんて理由でやる人はいないと思うけど

855 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 13:52:47.57 ID:E/6u1YW1.net]
long long ago... タイニー、スモール、コンパクト、ミディアム、ラージ、ヒュージつーのがあってだな

856 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:26:32.14 ID:ioLTStxt.net]
>>842
そうすることにします
ありがとうございました

857 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:34:15.15 ID:PzVUb2uc.net]
関数ポインタかなんかが8バイトに収まってなくて混乱したことがあったっけ

858 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:37:12.22 ID:Jq7h8mT9.net]
昔は16bitポインタと32bitポインタをLPとPで使い分けてたって戦争で死んだおじいちゃんに聞いた

859 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 17:17:57.87 ID:SS+/CtsS.net]
segment:offset時代か・・・

860 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 18:17:45.02 ID:t2vkJvVR.net]
アセンブラの相対ショートジャンプは8ビット

861 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:34:51.11 ID:9agulkW+.net]
ウィンドーズならINT_PTR使っとけばおkオール無問題
C++の標準規格でどうなっているのかわ知らん

862 名前:はちみつ餃子 mailto:sage [2022/02/09(水) 23:19:57.51 ID:9Cj+df9g.net]
規格上は std::intptr_t というものがある。
ただし関数ポインタやメンバ関数ポインタを格納できるとは限らない。
また、省略可能 (optional) であると明記されているので無くても規格準拠たりうる。

関数ポインタ同士 (メンバ関数ポインタは含まない) はお互いに変換可能であり
元の型にキャストしたら元の値と等しくなることは保証されるので
任意の型の関数ポインタを格納したいのであれば void* や intptr_t を使うよりは
適当な型の関数ポインタに入れるほうが規格に沿う。

メンバ関数ポインタは型通りに扱う以外はほとんど何の保証もないのだけれど
無理に変換して扱いたい場合も特に思いつかないのでどうでもいい。



863 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 02:00:13.27 ID:vaE+JZMI.net]
>>843
far/near を直接指定すれはすむ話、メモリモデルなんてどうでもいい

864 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 19:32:52.48 ID:OsDlZl05.net]
effective C++って現行のC++と比べてどのあたりが古いんですか?
代表的なところとかだけでも教えてくれると嬉しいです

865 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 19:38:59.22 ID:NUzD8R/O.net]
全て

866 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 20:00:39.81 ID:qtJUe0L+.net]
出版1998年やんけ
こんなもん使うぐらいならC言語やった方がマシなレベル

867 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 20:11:39.77 ID:OsDlZl05.net]
>>854
一応第3版は原書が2005年に書かれています…

868 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 20:20:25.92 ID:ZkLGowhi.net]
続編のeffective modern c++も古いけど、
こっちは隕石落下後の本だから読んでおいたほうがいいよ

869 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 21:18:10.31 ID:OsDlZl05.net]
隕石落下後ってなんすか?
あとC++の勉強するならこの本読め、みたいなのって他にもありますか?

870 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 21:38:32.90 ID:ty8Wss5J.net]
2005年でも古いなあ
C++98, 03, 11(0x), 14, 17, 20 と5回バージョンアップあるし
そのたびに標準ライブラリが更新されてる

古い本で古い書き方しか知らないと慣れてきたころにイラつくことになるから最低でもC++11対応のやつがいい

871 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 21:44:00.87 ID:Qcxer4Pv.net]
今更auto_ptr使うなとか言われても何の役にも立たないからな

872 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 23:48:22.57 ID:jkDJeeU1.net]
べつに使ってもいいんだよ
使い方さえ間違えなければ



873 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 00:26:40.18 ID:3fYQCkDW.net]
使うことが間違いでは?

874 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 04:33:24.42 ID:ajov4Ad8.net]
左辺値参照で無理やりムーブ作ったやつね

875 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 06:13:41.97 ID:ycfpInN1.net]
仕様のバージョンは普通自分で選ぶもんじゃないので、古いことを知るのだって意味はある
逆にどの辺が古い、というのが分かってもあまり意味ない

876 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 06:29:47.80 ID:DI/GcuLa.net]
いろんな範囲で一様乱数を次々と生成したいときってどうしますか?
uniform_int_distribution の範囲を次々と param で変える?
あるいは、妥協して剰余をとる形で範囲を変える?

877 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 06:32:11.91 ID:DI/GcuLa.net]
あるいは、uniform_int_distribution を次々と生成して使い捨てる?

実測するべきなんでしょうが、どれがオーバーヘッドが少ないかというカンがありません

878 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 06:51:44.09 ID:rfXE6dHR.net]
色々手はあるね
「いろんな範囲」の個数が決まっているならuniform_int_distributionの配列にするもよし
ランダムならparamもよし

次々と生成して使い捨て、つまりコンストラクタとデストラクタを都度実行するのは
俺はあんまりやりたくないが止めもしない

879 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 07:21:47.95 ID:JnTPIF3C.net]
>>865
同じ範囲を何回も使うならその分distributionを用意する、そうでないならparamを変えていくのが良さそうに思います。が、たぶん実行時の差はほぼ無いです。
いちおう関数の定数を書き換えていくかメモリ上に予めたくさん用意するかの違いとして判断しました。
計算重いのは大抵は乱数生成の方だと思うので、速くしたいならそっちをとりかえたほうがいいと思います。

880 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 07:48:28.31 ID:rfXE6dHR.net]
メルセンヌツイスターの売りの1つが速度がそんなに遅くない点だね

881 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 10:06:40.11 ID:+NRIy/Ul.net]
なんで剰余を取るのが妥協なん?

882 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 10:33:38.50 ID:SeV3jiEK.net]
一様性が一般に崩れるから



883 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 10:37:30.83 ID:SeV3jiEK.net]
個人的にはこうやってみたりしてゐる、

/// 閉区間[0, ub]を値域とする一様乱数を生成する。
unsigned long genrand_int32_with_ub(unsigned long ub)
{
assert(0 < ub && ub < (unsigned long)UINT32_MAX);
const uint64_t F = (uint64_t)UINT32_MAX;
const uint64_t W = (uint64_t)ub + (uint64_t)1;
const uint64_t Q = F / W;
#ifndef NDEBUG
const uint64_t R = F - W * Q;
assert(Q > 0 && 0 <= R && R < W);
#endif
// 半開区間[0, (W+1)*Q)を値域とする一様乱数取得
const uint64_t WQ = W * Q;
uint64_t rndLTWQ;
do {
rndLTWQ = (uint64_t)genrand_int32();
//print

884 名前:f("rndLTWQ=0x%08x, Q=0x%016llu\n", rndLTWQ, Q);
} while (rndLTWQ >= WQ);

// Qで割る。
const uint64_t r = rndLTWQ / Q;
assert(0 <= r && r <= ub);
return (unsigned long)r;
}
[]
[ここ壊れてます]

885 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 10:52:20.14 ID:cIrOgCom.net]
標準ライブラリ使わんの?

886 名前:はちみつ餃子 mailto:sage [2022/02/13(日) 11:12:52.07 ID:nD0XyBZB.net]
>>869
分かり易い例として 0 から 9 の一様な乱数列を生成するものを考えてみればいい。
このとき 0 から 7 の値が必要だからといって 8 の余剰を取ったらどうなる?
8, 9 が 0, 1 になるから 0 と 1 の出現確率が他の倍になってしまうだろ。

生成される値の幅が必要な値の幅よりも十分に大きいなら
許容可能な誤差として無視できる場合も多いとは思うが
様々なパラメータが有りうる状況では検証しづらい。

887 名前:はちみつ餃子 mailto:sage [2022/02/13(日) 11:15:35.52 ID:nD0XyBZB.net]
>>872
呼出しのたびに必要な範囲が違うような Distribution が標準に無いという文脈

888 名前:ハノン mailto:sage [2022/02/13(日) 12:39:58.09 ID:1UprWsoO.net]
>>873
それもあるけれども、昔の擬似乱数列は絶望的なまでに下位桁がランダムではない、という事情をひきずっているのでは?まあ MT はそうじゃないけどね

889 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 13:09:41.79 ID:+NRIy/Ul.net]
>>873
そらもちろん、元がそんな狭い範囲ならだめでしょ
あとまあ昔のrand的には割ってかけるのが正しいというのはあるけどそれは別の話で

890 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 13:37:58.02 ID:PyRRUUG6.net]
C++何の関係もない話で草
検証が必要ならすればいいだけ
要件すら不明で何もしてないのに質問するやつが馬鹿

891 名前:はちみつ餃子 mailto:sage [2022/02/13(日) 14:27:27.60 ID:nD0XyBZB.net]
>>876
> 元がそんな狭い範囲ならだめでしょ

逆に欲しい範囲が大きい場合でも同様。
この場合は様々な範囲が有りうるという想定なので、都合の悪い状況も考慮する必要がある。

892 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 15:14:31.28 ID:GfZrXG+U.net]
任意の区間の乱数って、どうせはみ出した分をちょん切るんでしょ?



893 名前:はちみつ餃子 mailto:sage [2022/02/13(日) 15:18:24.06 ID:nD0XyBZB.net]
せやで。

894 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 15:25:43.89 ID:CS3pmCmc.net]
そんな短い周期の疑似乱数使ってないんじゃない?
端っこは気にしないと思うなあ

895 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 16:00:39.64 ID:yoBtg/nD.net]
>>876
> そらもちろん、元がそんな狭い範囲ならだめでしょ
「分かり易い例」って書いてあるのも理解できないの?

896 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 16:06:17.09 ID:CS3pmCmc.net]
一般論でいうと周期に余裕がない様な疑似乱数使うのが間違いなんだと思うけどね

897 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 16:19:57.08 ID:kSk9XozZ.net]
そういうのを乱数知識ない奴が触らずに済むようにパッケージにしたのが<random>のdistributionなんだから素直に頼っとけよ

898 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 16:42:35.21 ID:JnTPIF3C.net]
周期と値域は別では

899 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 16:56:02.36 ID:KditTIA5.net]
>>885
内部的にはおおむね同じです

900 名前:はちみつ餃子 mailto:sage [2022/02/13(日) 17:04:20.08 ID:nD0XyBZB.net]
線形合同法とかなら値の範囲と周期が一致することもあるが、乱数の一般的性質というわけではない。

901 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 17:59:20.78 ID:av/6iEu7.net]
周期と値域は別だろ
たとえばマイナス一億と、プラス一億の2値をとる乱数とか

902 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 18:15:27.44 ID:AOBvb97v.net]
疑似乱数なんて今の値で次の値が決まるんだから周期も値も同じだろう
その値の一部を使ったらまあ見た目は減るだろうけど



903 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 18:32:37.88 ID:3OIdnfKh.net]
値域: 出力される値の範囲
周期: そのまんま乱数の出力が1周するステップ数

内部状態かなんかとごちゃ混ぜになってない?

904 名前:はちみつ餃子 mailto:sage [2022/02/13(日) 18:34:40.46 ID:nD0XyBZB.net]
>>889
内部状態と結果を分離する方式だって当然あるよ。
メルセンヌツイスタのどでかい内部状態を毎回値として利用するわけないし、
乱数として利用できる性質になってない。

905 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 18:34:49.25 ID:AOBvb97v.net]
さすがにマジの最大値と最小値なんて誰も問題にしとらんやろ

906 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 18:38:19.35 ID:mUIDTArd.net]
>>892
その思い込みで「値域」と「内部状態の大きさ」をごっちゃにしてるから話がこじれてたんでしょ。
区別して。

907 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 18:55:00.53 ID:RJAwRgrO.net]
端っこにゴミがあるよりは歯抜けが散らばってる方がいいというのは一理あるね

908 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 10:33:59.04 ID:14KvXXq2.net]
メンバー関数をテンプレートに出来たりしませんかね?

struct Sample{void func1(int i); void func2(int i);...}
template<typename T> void SampFunc(Sample& sample, int i){sample.T(i);}

みたいな

エラーはNo member named 'T' in ホゲホゲって感じですが

909 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 10:38:23.09 ID:14KvXXq2.net]
書き込んでから思いつきましたが直接やらずに
struct Caller1{void operator()(Sample& sample, int i){sample.func1(int i);}};
...
みたいなのを挟むべきですかねぇ

910 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 10:52:52.11 ID:Z549+Tcq.net]
structの{}内にテンプレートの文全部入れてみ?

911 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 11:13:25.35 ID:o9A3FVGP.net]
毎回 uniform_int_distribution のインスタンスを一時的に生成しては破壊するのを繰り返すのだけはありえんだろ
無意味なメモリのアロケーションありすぎ

912 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 11:16:30.38 ID:lu0CYRrt.net]
#include <iostream>
using namespace std;
struct Sample{
void func1(int i) {cout << i << "," << __PRETTY_FUNCTION__ << endl;}
void func2(int i) {cout << i << "," << __PRETTY_FUNCTION__ << endl;}
};
template<typename T> void SampFunc(Sample& sample, int i, T member_func){
(sample.*member_func)(i);
}
int main() {
Sample s;
SampFunc(s, 1, &Sample::func1);
SampFunc(s, 2, &Sample::func2);
return 0;
}



913 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 11:28:15.31 ID:s3l2ZTMb.net]
doubleとfloatの配列を同じように関数の引数に渡して扱う方法ってありますか?
・処理部が複雑なので引数の型が違う関数2個は作りたくない
・IF関数として両方版を作ってそこから処理部を呼び出すみたいな構造は可能、ただし別型版の実体コピー配列などは作りたくない(配列が巨大な為)

考えてみたのが、
配列の値部分をvoid*配列で指したものと、type_infoを持ったクラスなり構造体なりを用意して、
処理部でtype_infoに応じてvoid*をキャスティング、という方法ですが、
どうにも汚いのでもっと綺麗なやり方あれば教えてください。

914 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 11:34:29.03 ID:lu0CYRrt.net]
コードがないので0点

915 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 11:51:48.64 ID:MNwZvUCy.net]
テンプレートでいいだろ

916 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 11:54:11.63 ID:L8LvhIeL.net]
>>900
ふつーにテンプレートじゃね?
template <typename T> requires std::is_floating_point_v<T>
void func(T&& arg)
{
}

あとanyなんて手もあるけど
void func(std::any arg)
{
if(arg.type() == typeid(double)) { }
if(arg.type() == typeid(float)) { }
}

917 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 11:57:58.78 ID:81yRYH7R.net]
>>900
template<typename T, size_t size>
void f(T(&a)[size]){
}

918 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 12:04:39.18 ID:Z549+Tcq.net]
>>903に便乗してC++20で以下のような書き方も
#include <concept>
template<std::floating_point T>
void func(T && a){}

919 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 12:12:47.83 ID:L8LvhIeL.net]
>>900
まさかとは思うが
float f[2];
std::fill(std::begin(f), std::end(f), 0);

double d[2];
std::fill(std::begin(d), std::end(d), 0);
こんな基本はわかるんだよな?

920 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 13:46:37.17 ID:nlxkZZlr.net]
>>899
ありがとう、採用します 895

921 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 14:17:59.24 ID:s3l2ZTMb.net]
ありがとうございます、テンプレート便利ですね。使わせていただきます。900

922 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 14:33:14.26 ID:HFyH6Ayv.net]
あるクラスのメンバ関数のデフォルト引数を同クラスのメンバ変数にすることって可能でしょうか



923 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 14:51:26.37 ID:lu0CYRrt.net]
可能

924 名前:はちみつ餃子 mailto:sage [2022/02/14(月) 14:51:35.72 ID:eI8f6/6+.net]
もっとわかりやすく説明して……。

925 名前:はちみつ餃子 mailto:sage [2022/02/14(月) 14:55:09.41 ID:eI8f6/6+.net]
デフォルト引数をデータメンバにするってのは単にデフォルト引数の値をデータメンバに入れるって意味?
↓ こういうの?

struct foo {
int x;
void bar(int y=1) {
x=y;
}
};

こんな単純なことがわからないとも思えんし、なんか隠れた要件がありそうな気がするんやが

926 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 15:03:33.70 ID:JdXPqUHi.net]
>>912
逆だろ文網

927 名前:デフォルトの名無しさん [2022/02/14(月) 15:13:09.50 ID:9KgBPGkB.net]
>>912
こいつJ民だったの?

928 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 15:13:51.43 ID:M1yCctPq.net]
たぶん
struct S{
int field;
void f(int x=field){...}
};
ってのをやりたいんだろうけどな

あいにくC++のデフォルト引数は関数定義を見ただけで定数に決まるものしか受け付けられない

どうしても同等の処理をしたいならオーバーロードして転送するのが一番楽
void f(){f(field);}

929 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 15:17:25.95 ID:L8LvhIeL.net]
> デフォルト引数は関数定義を見ただけで定数に決まるものしか受け付けられない

そうか?
int func()
{
int a;
std::cin >> a; //絶対に定数になり得ない
return a;
}

void test(int arg = func())
{
}

int main()
{
test(); //OK. もちろん入力待ちをする
}

930 名前:はちみつ餃子 mailto:sage [2022/02/14(月) 15:21:08.20 ID:eI8f6/6+.net]
>>915
デフォルト引数は関数を呼び出すときに補われたかのように動作する。
関数呼出しのたびに評価されるよ。

931 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 15:33:51.02 ID:lu0CYRrt.net]
コードがないし状況不明で困ってる文面にも見えないからアレで十分

932 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 17:52:44.50 ID:m3z01MvF.net]
uniform_int_distributionって本質はIntTypeのペアを持った関数オブジェクトだから毎回生成したところで遅くはないはず



933 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 20:03:27.39 ID:vE8mmwyH.net]
乱数ってだいたい静的になんか持ってるよね

934 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 20:44:52.17 ID:UkhMLhRO.net]
マルチスレッド環境用にジャンプって機能が疑似乱数にあるよな
「疑似乱数 ジャンプ」でぐぐると出てくる

935 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 21:33:11.13 ID:CqI2HZWm.net]
状態持ってるのはエンジンの方
分布ごときにどんな怪獣ブラックボックスのイメージ持ってんだ

936 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 21:37:34.26 ID:zjXK/l5x.net]
エンジン以外に何があんの?

937 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 22:08:14.48 ID:2E5iBc/D.net]
例外処理で、catchした後、どのクラスがthrowしたのかってわかりますか?

938 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 22:35:41.44 ID:jOONNl+N.net]
初心者質問ですみません。
ヘッダで定義したテンプレート特殊化の非推奨属性がヘッダ外で効いてないっぽいんですけど、
ヘッダ外でも非推奨としたい場合何か特殊な事をしないといけないとかありましたっけ?

例えば
.h
```
template <std::integral INT_TYPE>
struct int_auto
{
using type = auto_int_detail<std::is_signed_v<INT_TYPE>, sizeof(INT_TYPE)>::type;
};

template <>
struct [[deprecated("char type is not allowed")]] int_auto<char>
{
using type = auto_int_detail<std::is_signed_v<char>, sizeof(char)>::type;
};

template <std::integral T>
using int_auto_t = int_auto<T>::type;

int_auto_t<char> i_header; // これは非推奨
```

.cpp
```
int_auto_t<char> i_cpp; // これは非推奨じゃない
```


939 名前:ネっています。
MSVC++(v142)で言語標準準拠はstd:c++20です。
[]
[ここ壊れてます]

940 名前:はちみつ餃子 mailto:sage [2022/02/14(月) 22:41:31.68 ID:eI8f6/6+.net]
>>924
それ自体には発生元を特定する情報を持たないけど……。
どういう状況?

・ 例外的な状況から回復する必要があって発生源によって処理の切り替えが要る
・ プログラムの正常系が動くはずなのに何故か出てくる例外の元を特定したい (つまりデバッグ用途)

どちら?

941 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 23:02:44.91 ID:2E5iBc/D.net]
>>926
大学でこういう課題を出されたのですが、全然いい方法がわからないです。
「あるクラスの例外だけをレポートするためにはどのような実装方法があるか」

942 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 23:08:22.30 ID:BDOt87Dq.net]
>>927
ヒント。例外はクラス等なんでも投げられる。そしてクラスは継承できる。



943 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 23:11:22.86 ID:R5SapkSQ.net]
それはどのクラスがthrowした、じゃなくて、どのクラスがthrowされた、の間違いだな

例外 c++で検索すれば答えはすぐ出てくるよ

944 名前:デフォルトの名無しさん mailto:sage [2022/02/14(月) 23:29:00.15 ID:a+DIA8ij.net]
>>916
>>917
嘘やんと思って試してみたらマジでいけるやんけ知らんかった

インスタンスフィールドまでは触れんかったが

945 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 00:14:19.75 ID:VnfLS+lO.net]
>>928
なるほど。std::exceptionを継承した自作クラスを定義して、
それを投げるというこですね?

946 名前:蟻人間 mailto:sage [2022/02/15(火) 00:23:09.85 ID:vbEMbnXt.net]
throw this;

947 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 14:33:45.24 ID:StNRh9X/.net]
クラスメンバをforで回す方法はありますか?

例えばintのaとdoubleのbという2つのメンバを持つクラスがあったとして、
forループでクラス内のメンバ変数を全部加算したい、など。

イメージはこんな感じです。
double all = 0.0;
for (T member : this->allMember)
{
all += member;
}

948 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 14:55:33.51 ID:aaenmMxg.net]
for で回さないといけないほど多数のメンバー変数がある設計をまず見直すべき

949 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 14:59:14.95 ID:0rNaChGh.net]
リフレクションは無いというのが回答か

950 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 15:15:26.06 ID:AWN50YIA.net]
動的にロードするのでなければ、自分で登録するか、ソースから解析するタイプのリフレクションライブラリを書くか探せばいい

951 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 15:16:41.63 ID:g9Gn9R1H.net]
配列じゃあかんのか

952 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 15:22:08.66 ID:3zKYAjvH.net]
数学のベクトルクラスでも作成してるのかい?



953 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 17:13:44.36 ID:QbgtcDS7.net]
>>933
あるよ。おすすめするわけじゃないけど。
https://www.google.com/search?q=boost+fusion+for_each+struct

こんな奇怪なライブラリ使わなくても済むようにするための言語側サポートはいずれも提案中。先は長い。
P1306 Expansion statements
https://github.com/cplusplus/papers/issues/156
P1240 Scalable Reflection in C++
https://github.com/cplusplus/papers/issues/545

954 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 17:28:44.20 ID:AWN50YIA.net]
じゃあこれもオススメではないがリフレクションベースで
https://www.rttr.org/
を使った例でも...
#include <iostream>
#include <rttr/registration>
using namespace rttr;
struct s{
int m1;
double m2;
};
RTTR_REGISTRATION {
registration::class_<s>("s").constructor<>()
.property("m1", &s::m1)
.property("m2", &s::m2);
}
template<typename T>
double sum(const T& o) {
type t = type::get<s>();
double sum = 0.;
for (auto& prop : t.get_properties()) {
sum += prop.get_value(o).to_double();
}
return sum;
}
int main() {
s o{1,1.1};
std::cout << sum(o) << std::endl;
return 0;
}
// 思いつきで聞いてるだけな気もするけどw

955 名前:デフォルトの名無しさん mailto:sage [2022/02/15(火) 17:31:44.80 ID:AWN50YIA.net]
ちょっと修正
#include <iostream>
#include <rttr/registration>
using namespace rttr;
struct s{
int m1;
double m2;
};
RTTR_REGISTRATION {
registration::class_<s>("s").constructor<>()
.property("m1", &s::m1)
.property("m2", &s::m2);
}
template<typename T>
double sum(const T& o) {
double sum = 0.;
for (auto& prop : type::get<T>().get_properties()) {
sum += prop.get_value(o).to_double();
}
return sum;
}
int main() {
s o{1,1.1};
std::cout << sum(o) << std::endl;
return 0;
}

956 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 18:59:32.62 ID:bHlhY+TU.net]
std::unique_ptr</*見切れる程長いクラス名*/> looongPtr{ std::make_unique</*見切れる程長いクラス名*/>(/*見切れる程多い引数*/) };
unique_ptrをメンバ変数にするときに最初のとこをautoに出来ないんですか?

957 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 19:17:57.96 ID:9tUnWmYs.net]
make関数使えば?

958 名前:蟻人間 mailto:sage [2022/02/17(木) 19:30:29.28 ID:sNGWbyyl.net]
typedef longlonglongtypename shorttypename;
auto ptr = std::make_unique<shorttypename>...

959 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 20:09:06.95 ID:TNf7BdQD.net]
>>942
できないですね。
https://cor3ntin.github.io/posts/auto_nsdmi/#so-why-are-auto-nsdmi-not-in-the-standard

960 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 20:26:37.89 ID:wIu//gsc.net]
>>942
設計を見直せ

961 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 21:57:39.99 ID:d4bhbZak.net]
単なる○○できますか?に対して設計見直せとだけ言ってくるガイジなんなん
まず質問に答えた上でなら分からんでもないが

962 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 22:12:03.03 ID:wIu//gsc.net]
うるせぇ雑魚が



963 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 23:04:10.74 ID:wrwPyddf.net]
ざーこざーこw

964 名前:デフォルトの名無しさん mailto:sage [2022/02/17(木) 23:56:12.71 ID:bHlhY+TU.net]
🤔

965 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 00:20:49.11 ID:q/M7jrOo.net]
C++の業務ってことで入ったんだけどC++とは名ばかりのC言語バリバリのコードだった
C++11、いやせめてCじゃなくてC++を書こうとしようぜと思うんだけど世の中こんなんばっかなん?こういうケースほんっとに多くてさぁ
40代↑の人が書いてるC++の言語って大体ほぼCでうんざりする

966 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 00:25:14.77 ID:qZSzRw8s.net]
偏見だけど同名の関数が並んでる以外Cとしてコンパイルできそうなイメージある

967 名前:はちみつ餃子 mailto:sage [2022/02/18(金) 00:25:30.70 ID:fowo2HBL.net]
>>951
なんでそんなことになるんだろうな?
コンパイラを信用してないからか?
ワイは40代以上やけど C++ を使える状況であえて C 的なスタイルで書く気はしないわ。
だって単純に面倒くさいもの。

968 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 00:26:19.39 ID:VWFgwWIW.net]
で、相談は?

969 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 01:20:21.17 ID:x3azmRP7.net]
Cの文法が覚えられる限界なんでしょうな

970 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 02:48:20.56 ID:y/CjghL0.net]
人事部の人がCとC++の見分けがつかなくて
会計上コンパイラ代に「C++」と書いてあったから
C++で募集かけてたんじゃね?

971 名前:ハノン mailto:sage [2022/02/18(金) 03:23:56.08 ID:AKyBDynF.net]
>>953
C++で通らないCは書きたくない、とは思いますね

972 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 13:34:17.22 ID:NqXxszTV.net]
>>951 ←こういう初心者にじゃあすべて作り直していいよ、と言うと何もできない。

無職の妄想からは何も生まれないのだよ。



973 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 14:23:13.29 ID:y/CjghL0.net]
自分は何かできるとでも言いたげだな
すべて作り直すということがどのくらいの工数かわかってないんだろ

974 名前:デフォルトの名無しさん [2022/02/18(金) 15:06:16.89 ID:tL/18rdC.net]
>>958
俺もそう思う

現場の不平不満ばかりの意識高い系エンジニアさん多いよね
その現場を改善するわけでもなく文句いうだけ
高いスキルあるならそんな現場やめれば?
単価150万超えるようなとこなら周りにも高スキルな人がたくさんいるよ?

現場の文句言うだけの奴は結局その現場がお似合いのレベルなんだよ、っていつも思ってる

975 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 15:32:05.24 ID:dD/fDJ+w.net]
>>951
普通の職場ならコーディングスタンダードあるから勝手はできないだろ。

コーダーとライブラリアンで許可されている範囲も違うだろうし。

976 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 15:57:07.65 ID:NqXxszTV.net]
>>955
無職が言いそうなことだ。無能なブロジェクトリーダーはCプロジェクトをあっさりとC++化できる、
存在しないスーパープログラマを探し続けるがそんな奴はどこにもいない。
そんなスーパーPGがいたらATMはバグで止まらない。C++書ける奴はCをバカにしないよ。

977 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 16:33:00.65 ID:xb2lszF9.net]
バグ出たまま放置してるヤツはバカにするけど

978 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 17:01:46.61 ID:1bc1nI/9.net]
正当な理由もなくスマポやSTLを嫌がった結果
生ポインタをガチャガチャいじくり回したスパゲティコード書いて
それが遅くて非効率でバグまみれリークだらけというのは非常によくあるけど
そういうCプログラマ様も敬わなきゃダメ?

979 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 17:04:32.95 ID:y/CjghL0.net]
バイアス満載だな
落ち着けよw

980 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 17:19:05.78 ID:xb2lszF9.net]
そういうどうしょうもないのはヒソカに心の奥でバカにしていいし反面教示にすべし

981 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 18:15:33.32 ID:jeS+/hUn.net]
マ板かここ?

982 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 20:06:32.33 ID:z2RoOtDN.net]
80対20の法則は大事だし、動くコードを作ってから最適化をした方がいいって偉い人も言ってた気がする

リソース管理はとりあえずスマポを使うのが吉だと思ってます



983 名前:デフォルトの名無しさん [2022/02/18(金) 20:12:42.95 ID:N0FOn5a0.net]
自分で責任もって結合テストする覚悟があるんならいくらでもCからC++に置き換えていいと思うよ

984 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 20:34:30.32 ID:y/CjghL0.net]
とテストの基本がわかってないやつが言う
C++に動的な型宣言はないからな

985 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 20:38:01.63 ID:NqXxszTV.net]
効率ガーと言うが、CをC++に書き換えて高速化、省メモリ化するなんてむしろレアケース。

986 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 20:44:21.03 ID:y/CjghL0.net]
C++の隠れたコードが何をしてるか解ってないやつが
C++にしたら高速化した低速化したって言語のせいにするんだよ

987 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 21:35:17.98 ID:UZsjZs7N.net]
こういうとき悲しいのはね
CもC++もたいして知りもしねえド素人のアマチュアが
想像と思い込みでもっていろいろレスつけてくること
噴飯ものだぞ?

988 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 23:03:13.88 ID:k8EYArXJ.net]
c++書いてたとき何ちゃらストリームやらのファイル操作遅すぎてムリすぎて結局fopen使ったような…
まあ便利は便利なんだけど利便さ求めるならそもそもpythonとかに逃げますし
C++17未満?だとfilesystem使えなくてこんな簡単なことも出来ないのかと絶望した気もする

989 名前:デフォルトの名無しさん mailto:sage [2022/02/18(金) 23:08:29.98 ID:qZSzRw8s.net]
std::endlがフラッシュ兼ねてるのを知らずに使うとクソ遅くなる

990 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 00:57:04.84 ID:kSnJ/KwP.net]
初心者にC++は早い
C++は人類に対する挑戦

991 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 01:05:13.77 ID:Sb0QDKc0.net]
みんな最初は初心者

992 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 01:28:32.55 ID:MLwzxLgZ.net]
Appleのcopland、Googleのandroid、MSのEdgeの失敗を見れば
予算と開発期間が十分にあれば解決すると思ってるならそれは間違いだと理解するだろう。
生ポインタをこねくり回す程度で脳みそのキャパが越えてるようじゃC++使ってもまともな実装なんてできない。
隠れたコードも何もC、C++はアセンブラの知識は必須だ。バイナリを読めるようになってから文句言え。



993 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 03:09:27.37 ID:kSnJ/KwP.net]
フムフムアセンブラが必須か…
https://godbolt.org/z/jq16j83We
#include<vector>
using namespace std;
void f(char* dst, const char* src_start, const char* src_end) {
const char*s = src_start;
char*p = dst;
while (s != src_end) *p++ = *s++;
}
template<typename Dst, typename Src>
void f2(Dst dst, Src src_start, Src src_end) {
auto s = src_start;
auto p = dst;
while (s != src_end) *p++ = *s++;
}
void hoge() {
vector<char> dst(1024), src(1024);
f(dst.data(), src.data(), src.data() + src.size());
f2(src.begin(), dst.begin(), dst.end());
}
これってどうしてhoge側だとSIMD使わないの?
C++コードでSIMD使わせるにはどうしたらいい?

994 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 04:43:40.93 ID:2+bZAOZm.net]
valarray

995 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 04:46:13.97 ID:kSnJ/KwP.net]
不正解

996 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 06:01:38.84 ID:2+bZAOZm.net]
hoge側でどうSIMD使えって言いたいの?
inlineとかだったらしばくぞ

997 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 06:20:48.76 ID:ZqDn11YK.net]
イントリンシック、でしょう?

998 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 08:45:24.25 ID:0ANF/iVA.net]
Intelのコンパイラに任せ

999 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 09:52:14.21 ID:kSnJ/KwP.net]
1024 -> 1024 * 16にすると...

1000 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 09:57:47.91 ID:kSnJ/KwP.net]
intrinsicは(inline)assemblerとほぼ同じなので、C#でしか使ったことないな

1001 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 10:03:29.25 ID:mDQ0X8WX.net]
アセンブラなどの理解は「低レイヤを知りたい人向けのCコンパイラ作成入門」が結構勉強になったんですが、バイナリは何で勉強すればいいですかね?

1002 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 10:34:54.00 ID:0ANF/iVA.net]
>>985
キャッシュメモリのアレで遅くなるやつか?



1003 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 10:44:00.07 ID:kSnJ/KwP.net]
さぁ?・・・callしたり判定用コードやサイズ計算とかオーバーヘッドがあるからじゃね?知らんw

1004 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 11:57:14.27 ID:kSnJ/KwP.net]
次スレ立ててきた
C++相談室 part159
https://mevius.5ch.net/test/read.cgi/tech/1645239402/

1005 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 12:08:36.38 ID:2h4SA+VW.net]
CADソフトCANDYの作者の発言。
>数年前に,私の会社で組み込み機器向けのプロジェクトで,C++コンパイラが安定して動かないので
>Cでプログラムを書くように私が指示したケースがあったのだが,
>何人かのエンジニアが「今さらCなんかでプログラムを書けませんよ。
>クラスを使えなければスパゲッティコードになってしまいます」と猛反対をしてきた。
■ 第4回 オブジェクト指向の本質
https://gihyo.jp/lifestyle/serial/01/software_is_beautiful/0004

別のインタビューと補完すると、そのときC++の標準ライブラリ的なブツを著者が
C言語でババーっと書いて仕事させたという話だったはず(記憶モード

ちょっどこの昭和カヨ?!

1006 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 12:18:20.98 ID:kSnJ/KwP.net]
組み込み機器用のCPUって特殊なんで、コンパイラが安定しないなんてよくある話
オブジェクト指向のメリットの本質についての話なので、可能/不可能が実装言語に依存しないというのもよくある話(楽かどうかは別)
別に昭和でも平成でも令和でも変わってないけど、>>991に伝わってないのは確か

1007 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 12:50:13.00 ID:gFosEVVi.net]
GTKのGObjectはCでオブジェクト指向を実現している訳だけど
(ただし学習コストが低いとは言えないと思う)

1008 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 12:53:15.56 ID:2h4SA+VW.net]
そんなん言ったらX Window SystemもC言語でオブジェクト指向しているらしい
らしい(伝聞

1009 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 13:05:47.37 ID:x/upE6G9.net]
当たり前だけどアセンブラでもオブジェクト指向はできるし還暦の爺さん(とは言ってもなかなかの人ではある)が10年以上前に書いた記事だしまじで何を言いたいのかよくわからん

1010 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 13:20:12.26 ID:kSnJ/KwP.net]
分からん分からん言うのは誰でも出来るし、どんな初心者でも何に対してもそう言える
なので、具体的に分からん部分を指摘できない人は初心者か、荒らしだと思ってる

1011 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 13:22:03.79 ID:kSnJ/KwP.net]
athenaくらいつかったことあるよね

1012 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 13:28:47.19 ID:2h4SA+VW.net]
>当たり前だけどアセンブラでもオブジェクト指向はできるし
ちょっカプセル化(シンボルの隠蔽)にやや手間がかかるし
オブジェクトをスタックにのコピーして返すのにもさらに手間がかかるし、
コンストラやデストラの呼び出しの保証や継承関係のチェックについて処理系のサポートが一切無いし、
やんけ;;;
そういうオブジェクト指向のプログラミングパラダイムにおいて裏で当然働くべき処理が
プログラマーが手間をかけ注意を振り向け続けないと実現されないというのはオブジェクト指向しているうちに入らないのでは……



1013 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 13:31:35.88 ID:6TS2kFRN.net]
brainfuckでもオブジェクト指向でプログラミングできるんやで

1014 名前:デフォルトの名無しさん mailto:sage [2022/02/19(土) 13:31:55.84 ID:6TS2kFRN.net]
>>1000なら次スレでちんこ貼る

1015 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 95日 18時間 42分 38秒

1016 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<275KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef