◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C++相談室 part158 YouTube動画>1本 ->画像>3枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1636969758/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん
2021/11/15(月) 18:49:18.44ID:I69rZ/Of
前スレ
C++相談室 part157
http://2chb.net/r/tech/1628474251/
2デフォルトの名無しさん
2021/11/15(月) 19:34:54.43ID:Vm/7t1d8
前スレが在るのに後ろスレが無い。
3デフォルトの名無しさん
2021/11/15(月) 19:54:16.81ID:ebGnmMes
江添のハブ
https://github.com/EzoeRyou
4デフォルトの名無しさん
2021/11/15(月) 22:07:48.56ID:Rt8JG1Np
Windows10でrecursive_directory_iterator使うと全角ファイル名が化けまくるんだけど
これwstringバージョンないよね
使い物にならないってこと?
5ハノン ◆QZaw55cn4c
2021/11/15(月) 22:13:18.15ID:a976/UsH
>>4
Windows でファイルシステムを操作するなら、もう utf16/W 系を陽に使うしかないのでは
http://2chb.net/r/tech/1434079972/53
6デフォルトの名無しさん
2021/11/15(月) 23:03:16.81ID:Vm/7t1d8
江添さんもRustに行ってしまわれたか。
7デフォルトの名無しさん
2021/11/15(月) 23:22:01.05ID:7YmnbmLD
なんにも確認してないがrecursive_directory_iteratorはpath扱うだけのはずで
wstring云々いいだすのがもう怪しい
8デフォルトの名無しさん
2021/11/15(月) 23:27:59.81ID:Rt8JG1Np
だからそう言ってるんだけど
9デフォルトの名無しさん
2021/11/15(月) 23:35:44.25ID:ebGnmMes
アメ公は多言語のことはあまり考えてないからな
10デフォルトの名無しさん
2021/11/16(火) 10:04:00.19ID:5D9mKY7b
wstringなら解決すると思ってる時点で頭可笑しい
11デフォルトの名無しさん
2021/11/16(火) 10:09:17.13ID:1zCm/6d5
全世界の文字集めたらWORDじゃ足りないことくらいアメ公でなければすぐわかりそうだが
12デフォルトの名無しさん
2021/11/16(火) 11:21:28.45ID:ZG22qfv2
>>11
でも、ハングル文字は、28文字しかないのに 5000ポイントも使っていたり、
元々文字じゃなかった絵文字を勝手に文字の様に扱ったりして行って
肥大化しただけで、世界の文字自体はそんなに多くない。
ユニコードの文字の扱い方に問題が有るんだと思う。
13デフォルトの名無しさん
2021/11/16(火) 11:32:32.20ID:ZG22qfv2
>>12
ハングルは、子音、母音、パッチムは、それぞれ20〜30程度しかないが、
それを組み合わせて1文字に組み立てられているらしくて、組み合わせ爆発で、
1万1000文字を越える。
全ての組み合わせが使われているわけではない。
また、実際に使用される文字は2500文字ほどらしい。
表意文字である漢字は、どうしようもないが、単なる表音文字に過ぎない
ハングルに、Unicodeは、1万1000ポイント以上を割り当ててしまってる。

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

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

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

数学記号などは文書の中でも使えるし、学問的にも昔から良く使われているのに
なぜかユニコードには含まれてないものが沢山ある。
それに、呼び方や起源は同じでても、数学的には異なる意味を持つコードが1つに
割り当てられていたり、πが四角く表示されて、数学では絶対に使わないグリフ
になってしまっていたりする。
基礎的な数学まで知らないばかが考えたとしか思えないし、それが
何十年間も改善されてない。
ユニコードは欠陥コード。
15デフォルトの名無しさん
2021/11/16(火) 11:45:03.78ID:ZG22qfv2
>>14
円周率の意味での「パイ」(PI)は、数学では必ず小文字で、かつ、丸みを帯びた
おなじみの記号を使い、決して、門構えのようなπは使わないし、
数学の本では見た事が無い。しかし、ユニコードではそれが標準になっており、
誰が使うのという感じがする。

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

あとは、⇔の記号が、横方向はあるが、縦方向が無いらしいこと。
これは最悪。
16デフォルトの名無しさん
2021/11/16(火) 12:42:55.75ID:c8tWUMdh
空集合記号とギリシャ文字のファイを混同してるような無知に文句つけられてUnicodeも大変だな
17デフォルトの名無しさん
2021/11/16(火) 13:52:17.07ID:5D9mKY7b
TeX
18デフォルトの名無しさん
2021/11/16(火) 14:00:17.37ID:5D9mKY7b
ΦφФфΦɸØø∅⌀

Φ
Φ
Φ

φ
φ
φ

ϕ
ϕ
19デフォルトの名無しさん
2021/11/16(火) 14:03:02.78ID:5D9mKY7b
http://unicode.org/reports/tr25/
20はちみつ餃子 ◆8X2XSCHEME
2021/11/16(火) 15:34:16.32ID:aaOD7qrs
そもそもが世界中の言語の発展は場当たり的な習慣の積み重ねを何千・何万年と続けてきてグダグダなんだから
それをどうがんばって整理しようとしたところでグダグダなんだわ。
元からグダグダだったのが Unicode のグダグダさとしても表れてきただけ。
言語ごと作り直しでもしない限り綺麗な符号体系にならないんで、
グダグダさと折り合いをつけてつきあっていくしかしょうがない。
21デフォルトの名無しさん
2021/11/16(火) 15:36:04.02ID:Z1xN+BQU
>>16
Unicodeではちゃんと区別されて無いだろ。
22デフォルトの名無しさん
2021/11/16(火) 15:36:33.85ID:Z1xN+BQU
>>20
いや、Unicodeに問題がある。
23デフォルトの名無しさん
2021/11/16(火) 15:37:58.58ID:Z1xN+BQU
>>18
数学の空集合の記号とは違ってる。
どうせ、パイ(π)は四角い変なグリフで、数学では絶対使えない。
24デフォルトの名無しさん
2021/11/16(火) 15:54:46.23ID:5D9mKY7b
http://unicode.org/reports/tr25/
ここの
empty set でもだめ?
25デフォルトの名無しさん
2021/11/16(火) 15:56:48.89ID:c8tWUMdh
>>21
Greek PhiはU+03A6(大文字)・U+03C6(小文字)・U+03D5(数学用シンボル)
Empty setはU+2205
全く別のコードポイントが割り当てられてるし、>>19の資料でも全く別の文字として議論されてるけど
何を見て何がどう区別されてないと思った?
26デフォルトの名無しさん
2021/11/16(火) 17:48:24.19ID:/uf4lfZV
unicodeで一番困るのがソート
単純にコードの大小でソートするとおかしな事になるからな
27デフォルトの名無しさん
2021/11/16(火) 18:13:59.22ID:G/HDu5Xp
>>25
調べてみたが、そもそもグリフが安定していないから数学では使えない。
数学ではグリフによって意味を分けているから。
28デフォルトの名無しさん
2021/11/16(火) 18:21:08.03ID:G/HDu5Xp
そもそも、数学では縦棒が斜めになっているか、縦になっているかでもニュアンス
が違うことがある。
特に空集合の場合、斜めになっていないと、普通の数学的な感覚には
合わない。完全に垂直だと駄目だ。
それに、イタリック体と普通のプレインな書体も、明確に区別できるようになって
ないと、プログラムの本でも使えない。
たとえば、BNFなんかでもそう。
遊びでグリフを変えてもらっては使い物にならない。
後は、カンマの横幅を勝手に狭くするのはプログラマー泣かせ。
カンマは飾りじゃなくて、あるのと無いのとでは大違いだし、
ピリオドと完全に区別できなくてはならないのに、狭すぎて連続した
場合に、フォントが小さい時、非常に判別しにくいことがある。
フォントを作る人は大学以降の数学や物理学に詳しい人に絶対に
聞いて欲しい。
29デフォルトの名無しさん
2021/11/16(火) 18:25:30.84ID:G/HDu5Xp
Appleのスティーブジョブスのせいで、プロポーショナルフォントが多くなり。
それをIDEなんかでも使う馬鹿(=MSのプログラマ)がいて、もうアホかと。
空白は有るのかないのか分からないし、からの「〜」が、上の方にある
チルド~に見えたり、カンマは狭すぎていくつあるのか数えられない、
円周率のπは、数学では決して使うことのない門構えのようなグリフだし。
遊びで変えるな。
芸術ではないんだ、厳密に区別しないといけないんだ、プログラムも
数学も。
30デフォルトの名無しさん
2021/11/16(火) 18:25:45.65ID:Gx8hwJEY
それはUnicodeじゃなくてフォントの問題なのでは
31デフォルトの名無しさん
2021/11/16(火) 18:42:34.64ID:c8tWUMdh
コードポイントとグリフとフォントの区別すらついてない無知蒙昧丸出しで
よくもまあそんな意味のない長文を恥ずかしげもなくグダグダ書き散らかせるもんだ
その度胸だけは褒めたるから、Unicodeに物申す前に基礎から勉強しろよ
32デフォルトの名無しさん
2021/11/16(火) 18:46:42.11ID:G/HDu5Xp
>>31
分かってないのはお前だろ。
33デフォルトの名無しさん
2021/11/16(火) 18:46:42.11ID:G/HDu5Xp
>>31
分かってないのはお前だろ。
34デフォルトの名無しさん
2021/11/16(火) 19:02:52.69ID:nSspXH9s
>芸術ではないんだ、厳密に区別しないといけないんだ、プログラムも
>数学も。
フォントとグリフと書体をこちゃ混ぜにしてる人間がこれ書いてんのギャグだなw
35デフォルトの名無しさん
2021/11/16(火) 19:08:30.21ID:/J0mEe48
3回もNGさせんなゴミ
36デフォルトの名無しさん
2021/11/16(火) 19:44:20.16ID:LLUTRYIZ
ユニコードを内包する世界最大の文字集合がGB18030。
37デフォルトの名無しさん
2021/11/16(火) 23:08:02.71ID:FCoZ1v9f
漏れが書いたように思われそうだがちげう
記念パピコ
38デフォルトの名無しさん
2021/11/17(水) 07:02:28.15ID:eMBlRA7Q
自意識過剰
39デフォルトの名無しさん
2021/11/17(水) 09:42:16.28ID:PyX7rfdm
>>36
ハングルを3000文字くらいと、コンポジションに落とし込めなかったのは人類史における、、、まーいーや終わったことだ。
まぁMacでファイル名読むと「パ」が「ハ」と「゜」に割れてマジビビったけどな。
40デフォルトの名無しさん
2021/11/17(水) 11:02:21.42ID:wlAtkNPK
https://0g0.org/category/13000-1342F/1/
ቻンቻンがቺቻቺቻ
41デフォルトの名無しさん
2021/11/17(水) 15:31:08.88ID:R6z6I769
>>27
Unicode は言語情報を保持しない。
いわゆる中華フォント問題が起こるのはテキストだけからは日本語フォントを適用すべきなのか
中国語フォント (あるいは他の言語) を適用すべきなのかわからないからで、
そのあたりはアプリケーションレイヤで解決する想定になっている。

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

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

文字コードとしての理想の姿と、
まずは皆が Unicode という規格に載ってこないと理想もクソもねぇという板挟みがある。
42デフォルトの名無しさん
2021/11/17(水) 19:44:58.31ID:cvtz8o7Y
答えは相手が握ってるので俺がただしいなどありえない
43デフォルトの名無しさん
2021/11/17(水) 19:45:13.10ID:cvtz8o7Y
まちがえた
44デフォルトの名無しさん
2021/11/17(水) 22:47:12.58ID:+aW7NpDL
Unicodeとか文字とグリフの区別がぐちゃぐちゃになりつつあるとい
う印象、ど
うしてこうなった?!
45デフォルトの名無しさん
2021/11/18(木) 00:03:15.71ID:Sx+E3gZ7
>>41
いや、円周率を、パイという記号で表すのは中学生でも知っている訳で、
あのおなじみの形状が安定して表示できない段階で文字コードとして終わってる。
文字数の制約があるならまだしも、誰も使わないような漢字や、その場しのぎの
ふざけた記号が大量に含まれているのに、円周率という誰でも知っていて
記号が絶対にあの記号で無ければ伝わらないものに対して、ちゃんとした
記号が安定したコードポイントにはどこにも割り当てられてないのは
大問題。
中国語の文字と日本語の文字の違いよりも影響はずっと大きい。
46デフォルトの名無しさん
2021/11/18(木) 00:17:21.61ID:ypdX2Kse
いいかげんにしろよ
・見た目を決めるのはフォントの仕事であってUnicodeのコードポイント割り当てに文句付けるのはお門違い
・そもそも数学記号用のコードポイントはギリシャ文字とは別にちゃんと割り当てられてる(Mathematical Alphanumeric Symbols)
・ここはC++スレだスレ違い消えろお前の巣はこれだ→http://2chb.net/r/tech/1593777227/
47デフォルトの名無しさん
2021/11/18(木) 01:08:04.34ID:Sx+E3gZ7
>>46
実際にはちゃんと割り当てられてない。
しかも、フォントの仕事である、と切り分けるのも問題。
というのは、現実に、円周率としては決して使っては成らない
おかしなフォントがパイの自に割り当てられていて、それを回避する方法が
ない。なので、まともなパイのフォントを自作するか、画像ファイルを
用意して画像を挿入するしか方法が無い。
48デフォルトの名無しさん
2021/11/18(木) 01:21:19.65ID:ku1GvVZm
>>47
他の文字コードならそれが回避できるとでもいうんけ?
あほか。
49デフォルトの名無しさん
2021/11/18(木) 01:36:35.92ID:Sx+E3gZ7
>>48
まず、円周率の記号は、ギリシャ文字のパイならなんでもいいというわけではないこと
を文字コードやフォントを作ってる人が理解することから始めなければならない。
また、数学で同値記号で使う矢印は矢印だったら何でも良いという訳ではなく、
左右と上下の区別と、二重線か一重線かという好みの問題も含めて、
固定的なフォントでなくてはならない。二重線の場合、中は白抜きでなくては
ならないので、決して塗りつぶすべきではない。

そういうことを理解してない人が文字コードやフォントを作る資格はないのに、
アメリカ人はそれをやってしまってる。アメリカ人は何もかもおかしい。
クラフトマンシップが無い。
50ハノン ◆QZaw55cn4c
2021/11/18(木) 01:40:47.32ID:MiW85JEr
>>49
アメリカ人が悪いわけではない、数学者を文字コード制定に加えなかった馬鹿どもがアメリカ人の中にもいる、というだけ、それがどのような属性の人間か容易に推測できるだろう?
というか、TeX をそのまま持ってこればいいだけの話なのにそれすらわからないのは、どういったわけなんだ?
51デフォルトの名無しさん
2021/11/18(木) 01:42:39.93ID:ku1GvVZm
>>49
知らんがな。
それはアプリケーションで解決しろと言ってる。
52デフォルトの名無しさん
2021/11/18(木) 01:47:08.17ID:Sx+E3gZ7
>>50
あなたは、物を知らない。
TeXも実はあまり綺麗ではないし、日本で標準に使われていた数学記号を表示しにくい。
最初、同値記号が長すぎたり、左右方向しかないことにまず、つまずき易い。
回避作が全く無いわけではないが。
近似的に等しいの記号も、日本で馴染みのある上下に点々を打つものは表示しにくい
とかもあるし。
円周率のパイと空集合はさすがに表示できるが。
53デフォルトの名無しさん
2021/11/18(木) 01:48:39.42ID:Sx+E3gZ7
日本人が作っていたソフトには、良いソフトが多かった。
アメリカ人がそれを潰した。
というか、日本人が日本製のソフトを買わない。
例え良いソフトがあっても。
わけが分からん。
54ハノン ◆QZaw55cn4c
2021/11/18(木) 02:04:24.47ID:MiW85JEr
>>52
≒ \risingdotseq \fallingdotseq
⇔ \Leftrightarrow
上下方向同値は、なければないでなんとかなるのでは?
55デフォルトの名無しさん
2021/11/18(木) 02:12:19.27ID:G3Aynww3
数学数学うるさいくせにいつまでも用語使いがいい加減なままなのはどういうわけだ
そろそろ文字・記号・文字コード・コードポイント・グリフ・フォント・書体の定義くらい理解して使い分けろよ
56デフォルトの名無しさん
2021/11/18(木) 02:23:27.66ID:Sx+E3gZ7
>>55
グリフとフォントの違いはいくら調べても、あまり分からなかった。
コードポイントは分かる。
しかし、コードポイントに単にギリシャ文字の「パイ」を割り当てていても、
円周率用におなじみのパイであるとは限らず、実際にWindowsでは、門構え
のような変な文字になってしまってる。
そして、それを回避するのは難しい。
57デフォルトの名無しさん
2021/11/18(木) 02:26:19.78ID:Sx+E3gZ7
字体と字形は違うという話もある。
漢字の場合は確かにそうかもしれない。
しかし、数学では最後の形が重要だから、最後の最後の最後の画面上に表示される
グラフィックが、数学の習慣にぴったり一致してなければ駄目。
58デフォルトの名無しさん
2021/11/18(木) 07:48:03.24ID:R1PabgqQ
円周率にギリシャ文字のπを充てた数学が悪い、数学は俺々円周率記号を作るべきだった
って言ってる?
59デフォルトの名無しさん
2021/11/18(木) 07:57:54.58ID:SHW/gJRC
auto \u03c0 = std::numbers::pi;
60デフォルトの名無しさん
2021/11/18(木) 09:43:04.76ID:RYwZiL19
コードは別れてるのだから、あとはデザイナの問題、フォント使用者の問題だろ
外人が作ったフォントの"ゐ"の字が"い"と同じだったからunicodeに"ゐ"の字を安定的に出せるようにしろっていうのはお門違い
61デフォルトの名無しさん
2021/11/18(木) 09:55:03.61ID:maTPk2BR
お前らおっぱいの形で何を興奮してるんだ?w
この変態どもめw
62デフォルトの名無しさん
2021/11/18(木) 10:01:42.33ID:SHW/gJRC
おっぱいに興奮するのは正常な性欲で変態じゃないぞ
あ、変態から見るとノーマルが変態なのかw
63デフォルトの名無しさん
2021/11/18(木) 11:08:33.41ID:/He/baLS
うちのπは変換選択中は数学記号のπで一覧に出てるんだが変換確定すると門構えのπになるなω
アプリのフォントとIME(FEP)のフォントが違うんだろうなωωω
64デフォルトの名無しさん
2021/11/18(木) 11:10:13.05ID:/He/baLS
秀丸なら数学用のπだし
メモ帳だと門構えのπだったわ
TeX使ったらどうでもよくなるけど
65デフォルトの名無しさん
2021/11/18(木) 11:17:33.47ID:/He/baLS
とりあえず
メイリオは糞π
MS Gothic は 数学用π
MS 明朝は 数学用π
みかちゃん ぎりぎりセーフ
Migu 1M 数学用π
IPAex Gothic 数学用π
IPAex 明朝 数学用π

んーいまのところだめなのメイリオだけだなω
66デフォルトの名無しさん
2021/11/18(木) 11:20:46.59ID:RYwZiL19
56はwindowsがって言ってんだから全部ダメなんだろ
67デフォルトの名無しさん
2021/11/18(木) 11:57:56.18ID:/He/baLS
>>56
>それを回避するのは難しい。

えっ?
68デフォルトの名無しさん
2021/11/18(木) 17:51:51.89ID:hyycWvP/
using namespace std;
するのとstd名前空間内の各エンティティについて
using std::foo;
するのに違いはありますか?
69デフォルトの名無しさん
2021/11/18(木) 21:59:19.03ID:asQz6rBs
はい。前者は std 内全部の名前が修飾なしで使えるようになりますが、後者は指定したものだけになります。
70デフォルトの名無しさん
2021/11/18(木) 23:09:08.75ID:tPrhQHc6
明朝体とかゴシック体がフォント
明朝体で書かれた「あ」とゴシック体で書かれた「あ」は異なるグリフの「あ」
文字としては同じ

ということのはずだがユニコードはぐちゃらけてしま
tったど
うしてこなうった!?
71デフォルトの名無しさん
2021/11/18(木) 23:11:14.48ID:tPrhQHc6
ググったらJISで「♯」と「#」が異なる文字だからユニコードでも元に戻せるように異なるコードにしているとか
ワケワカメ
一昔前の似たような文字を同じコードにする方針な美しいユニコードはどこいった……?!
72デフォルトの名無しさん
2021/11/18(木) 23:12:14.00ID:tPrhQHc6
訂正orz
△:異なるコード
○:異なる文字
73デフォルトの名無しさん
2021/11/19(金) 00:01:43.17ID:bln5kEpJ
>>71
シャープとナンバーサインは違う記号で違う意味でしょ。
カタカナの「ロ」と漢字の「口」まで統合されかかったというエピソードもあるんだが、
そういうのが Unicode の美しさだと思うか?

何を以て「似たような文字」とするか文字に対する考え方というのは
それぞれの文化によるによるので既に確立している符号体系を尊重するのは合理的な方針なんだよ。
歴史的経緯を切り捨てられないのは不格好だが逆に言えば既存の不格好さを継承する程度で済む。
74デフォルトの名無しさん
2021/11/19(金) 08:12:17.83ID:Lvg3H2b6
>>71
CJK統合漢字の大失敗に懲りたんだろ。
75デフォルトの名無しさん
2021/11/19(金) 09:07:31.36ID:jz7MocuB
ここC++のスレだよな?
76デフォルトの名無しさん
2021/11/19(金) 10:51:32.62ID:Zjxpzk7M
そうだよスレ違いのUnicode叩きも擁護も出て行け
77デフォルトの名無しさん
2021/11/19(金) 11:12:38.26ID:eyeX0xyM
♯include は動かない方が良い
\ も mac だとやばい \ があるらしいなω
78デフォルトの名無しさん
2021/11/19(金) 11:14:02.03ID:eyeX0xyM
codepadだかideoneだかが
\nを勝手に半角の¥nにしてコンパイル通らなくて可笑しいときがある
79デフォルトの名無しさん
2021/11/19(金) 11:30:01.23ID:IBPJGhlA
>>77
素人丸出しだからそのへんでやめとけ
\が(過去の経緯で)本来あるべきグリフで表示されないのはwindows(日本語設定時のみ)のほう
80はちみつ餃子 ◆8X2XSCHEME
2021/11/19(金) 13:02:30.99ID:bln5kEpJ
JIS X 0201 (7ビット及び8ビットの情報交換用符号化文字集合) による。
JIS X 3010 (プログラミング言語C) の中でもスラッシュとチルダが JIS X 0201 では円記号とオーバーラインに
置き換えられる旨の補足情報が書かれている。

つまり Windows の挙動は日本の (文字コードに関する) 規格を尊重した結果だし、C の JIS 規格でもちゃんと言及している。
とはいえ ISO/IEC 9899 に反する事情があるからこそ日本の規格 (JIS) にするにあたって補足を入れる必要があったわけで、
「本来あるべき」から遠いのは確かに Windows のほうとは言える。
81デフォルトの名無しさん
2021/11/19(金) 14:07:51.51ID:eyeX0xyM
>>79
知ってると思うが
これの話なんだが
http://codepad.org/WsmFWVty
#include <stdio.h>

int main()
{
printf("abc\n");
return 0;
}
82デフォルトの名無しさん
2021/11/19(金) 14:10:16.50ID:eyeX0xyM
>>79
これも一緒ね
https://ideone.com/KyjIyk
どうでも良いけどω
83デフォルトの名無しさん
2021/11/19(金) 15:13:48.52ID:gL3kBbt5
どうでもいいのは勘違いしてるお前の話
84デフォルトの名無しさん
2021/11/19(金) 17:22:13.91ID:r4tdjD9P
アホすぎる
C++の話しようぜ
85デフォルトの名無しさん
2021/11/19(金) 18:47:23.14ID:P2N6jWZN
WindowsのvisualC++2019でDLLのロードが出来ません
dll defからlibをつくり#pragma comment( lib, "sample" )とやればできた記憶なんですが
64bitのバージョンも全部合わせてあるんですが
10年ぶりにやったら動きません
ボーランドC++だと修飾名が変わってdefを書き換えたりはあったと思うのですが

> error LNK2019: 未解決の外部シンボル sqlite3_open
8685
2021/11/19(金) 18:53:32.17ID:P2N6jWZN
自己解決しました
dumpbin.exe /exports コマンドでdefファイルを作成した場合、
EXPORTS の記述がなかったからでした
87デフォルトの名無しさん
2021/11/20(土) 00:18:32.03ID:KMJ1ohr2
>>81
エスケープを円で覚えてるからそんな間抜けな間違いするんだよ
ブログラマならエディタの設定変えとけ
88デフォルトの名無しさん
2021/11/20(土) 04:22:38.39ID:VRiN34hT
>>81
馬鹿過ぎて
89デフォルトの名無しさん
2021/11/20(土) 11:48:10.21ID:DTIeq0Vp
>>87
ブログラマってなにかの隠語?
90デフォルトの名無しさん
2021/11/20(土) 12:05:58.69ID:T1SqYaku
ナニナニ
    彡⌒ ミ ナニナニ
   (´・ω・`) 彡⌒ミ
,彡⌒ 彡⌒ ミ (・ω・`) また文字コードの話?
(´・ω(´・ω・`) ⌒ ミノ⌒ミ
  u_| ̄ ̄||´・ω・`)ω・`) マター?
 /旦|――||// /|と ノ
 | ̄ ̄ ̄ ̄ ̄| ̄| . |-u
 |_____|三|/
91デフォルトの名無しさん
2021/11/20(土) 19:11:01.64ID:F5vrtFYR
>>90
プログラマ=ハゲと思われるからそのAAやめろよ(´・ω・`)
92デフォルトの名無しさん
2021/11/21(日) 03:33:39.04ID:yh1CvOcy
実際C++プログラマはハゲが多いんだから別にいいだろう
教祖からしてハゲなんだし
93デフォルトの名無しさん
2021/11/21(日) 08:40:03.48ID:uokK0Aao
そうそう、教祖がゲーハー
これはデカい
94デフォルトの名無しさん
2021/11/21(日) 17:11:36.41ID:BwaLJwgU
Greek PhiはU+03A6(大文字)・U+03C6(小文字)・U+03D5(数学用シンボル)
Empty setはU+2205
全く別のコードポイントが割り当てられてるし、>>19の資料でも全く別の文字として議論されてるけど
何を見て何がどう区別されてないと思った?
95デフォルトの名無しさん
2021/11/21(日) 20:56:14.20ID:MSJBJTi1
プログラミング言語の世代論というのがあって、
第一世代は CPU のアーキテクチャべったりの機械語、
第二世代は機械語が解る人間向きの低級言語、
第三世代は自然言語寄りの高級言語、
第四世代は目的型言語、
…… で、いわゆる「第五世代」は、コンピュータの都合じゃなくて
人間の都合に合わせようよ、というコンセプトになった。
「じゃあ、どのあたりから始めるか」という話は
ありそうに思う。
96デフォルトの名無しさん
2021/11/21(日) 22:09:51.70ID:jS7RYefb
>>79
素人丸出しとか言ってるが
実際macだと設定によってはバックスラッシュと同じ扱いにならない\が
普通にキー叩いたら出るんだぞ
97デフォルトの名無しさん
2021/11/21(日) 22:16:19.52ID:32ll5fa9
エスケープが円だと思ってるから間違えるんだろ
98デフォルトの名無しさん
2021/11/21(日) 22:42:33.87ID:zasxIKRm
普段からU+005Cのグリフがバックスラッシュになってるフォントしか使わないから円記号に違和感しかない

そりゃ個人の自由だけどプログラミングしてるなら少しフォントにこだわってもいいと思う
99デフォルトの名無しさん
2021/11/22(月) 11:36:57.09ID:/m9OFYAK
日時を数値に変換する良い感じの関数教えてくださいよ
100デフォルトの名無しさん
2021/11/22(月) 11:53:19.81ID:NpEcC+CD
std::chrono
101デフォルトの名無しさん
2021/11/22(月) 12:07:40.30ID:axkd8Lua
おどろき最小の法則と言えば
https://onihusube.hatenaぶろぐ.com/entry/2020/04/03/211442
102デフォルトの名無しさん
2021/11/22(月) 12:12:11.62ID:buYIHjVZ
人を下に見られる程精通してる人って正直羨ましいわ
知れば知るほどまだまだ知らない事が沢山あるなぁと勉強不足を実感してしまう

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

むしろ人を下にみないと精神状態が不安定なんでしょ
103デフォルトの名無しさん
2021/11/22(月) 12:23:22.14ID:NpEcC+CD
ダニングクルーガーね
104デフォルトの名無しさん
2021/11/22(月) 13:29:19.96ID:SX8MGonp
Windows App SDK入れてみたがエラーが多くまだ使えない
105デフォルトの名無しさん
2021/11/22(月) 19:04:02.58ID:aHjY0LXr
ヘッダファイルで変数の宣言するとき、引数付きのコンストラクタ使おうとするとコンパイルエラー出るんですけどこの書き方って良くないんですか?
106ハノン ◆QZaw55cn4c
2021/11/22(月) 19:08:25.29ID:f9+TjGGq
>>105
ヘッダだからエラー、というわけではないです
ヘッダじゃない普通の cpp に書いてもエラーなのでは?
具体的にソースを示してください
107デフォルトの名無しさん
2021/11/22(月) 20:43:52.70ID:aHjY0LXr
>>106
// NG ヘッダにそのまま書こうとすると型指定子が必要ですとエラーが出る
private:
MenberLibClasse obj ("piyopiyo");

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

挙動把握しきれないんですけどライブラリ側の問題でしょうか??
108ハノン ◆QZaw55cn4c
2021/11/22(月) 20:50:48.90ID:f9+TjGGq
>>107
NG のときのエラーの内容は?
エラーメッセージを貼ってください、正直、よくわかりません
109デフォルトの名無しさん
2021/11/22(月) 20:56:23.56ID:0LbM6y2O
>>107
宣言の位置でメンバを初期化できるのはC++11からだけど、それが原因かな?
110デフォルトの名無しさん
2021/11/22(月) 20:59:28.54ID:UBpGrDL8
書くとしたらこうやろ
private:
MenberLibClasse obj = "piyopiyo";
111デフォルトの名無しさん
2021/11/22(月) 21:02:09.68ID:jXuEZ/Sz
丸括弧はダメだよ
イコールか波括弧でなきゃ
112デフォルトの名無しさん
2021/11/22(月) 21:04:04.13ID:jXuEZ/Sz
型指定子が必要って言われるのは
関数宣言と見られていて
仮引数の場所にリテラルがあるってことだ
113デフォルトの名無しさん
2021/11/22(月) 21:13:00.22ID:aHjY0LXr
>>111
イコールはダメで波括弧に変えたらコンパイルできました
114デフォルトの名無しさん
2021/11/22(月) 21:30:02.05ID:ahYOm2Qx
private:
MenberLibClasse obj{"piyopiyo"};
115デフォルトの名無しさん
2021/11/22(月) 23:03:46.80ID:gucWMAFN
>>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
116デフォルトの名無しさん
2021/11/22(月) 23:16:45.51ID:gucWMAFN
なおtime_point同士で引き算もできる
結果を具体的時間単位の時間表現にするのは同じくduration_cast<T>()
117デフォルトの名無しさん
2021/11/23(火) 10:20:15.57ID:wZOweAJh
ostringstream の precision の上限がなぜか 255 に設定されているようで
mpreal big("1000桁規模の浮動小数点数");
ostringstream ss;
ss.precision(1000);
ss << big;
とすると ss に 255 文字程度しか入らないのです
cout.precision(1000);
cout << big;
だと 1000桁出ます
ostringstream の precision の上限をもっと大きくする方法はありますか?
118デフォルトの名無しさん
2021/11/23(火) 10:22:20.09ID:wZOweAJh
ああ
勘違いかも
もうちょっと調べて質問します
119デフォルトの名無しさん
2021/11/23(火) 10:28:59.05ID:wZOweAJh
とりあえず判ったのは
ss.rdbuf() の default の上限値が 255 らしい
120デフォルトの名無しさん
2021/11/23(火) 10:53:38.11ID:v39GCTAR
だっせ
そんな上限、規格票に書いてあるのか?
121デフォルトの名無しさん
2021/11/23(火) 11:40:46.26ID:Vfqk4Xs7
>>115
>MSVCのstd::chrono::zoned_timeが未実装

TZ=JST-9
とか描いてあってもだめかな
122デフォルトの名無しさん
2021/11/23(火) 11:52:24.16ID:wZOweAJh
>>120
ss.rdbuf()->in_avail()
123デフォルトの名無しさん
2021/11/23(火) 13:42:01.58ID:X+sq98An
再現しそうな最小限のコードだけ描いて
mingw + gcc でコンパイル&実行したら期待通りの動作をしたが
VC だとやっぱり上限があるっぽい動きになってる
rdbuf() 使いつつ seek() すれば大丈夫かも知れないが
自分の使い方が間違ってるだけだと思いたい
124デフォルトの名無しさん
2021/11/23(火) 13:44:07.61ID:X+sq98An
とりあえず mpreal は関係なかった
VC 側の問題らしいのでもう少し掘ってみる
125デフォルトの名無しさん
2021/11/23(火) 14:39:06.53ID:X+sq98An
VC 側 rdbuf()->pubseekpos() 併用で解決
126デフォルトの名無しさん
2021/11/23(火) 15:22:40.52ID:V3fVQTwt
クラスのメンバ変数が全部intとかdoubleとかで足し算掛け算ができるものの場合に、
クラスの足し算掛け算を各メンバ変数の足し算掛け算として定義したいのですが
operator +とかoperator *のオーバーロードでメンバ変数について一個ずつ書いていく以外の方法ありますか?

今やろうとしていることでメンバ変数が多いので、いちいち列挙せずに済むなら便利だなと思ったのですが
127デフォルトの名無しさん
2021/11/23(火) 15:49:25.55ID:57zkg5+u
>>126
valarrayじやね?
128デフォルトの名無しさん
2021/11/23(火) 16:47:46.55ID:za9QU+hA
>>117
VC の in_avail() が間違った値を返してるんだなこれ
129デフォルトの名無しさん
2021/11/23(火) 17:12:53.52ID:V3fVQTwt
>>127
ありがとうございます、使ってみます
130はちみつ餃子 ◆8X2XSCHEME
2021/11/23(火) 17:34:18.50ID:VSfhJ4CF
>>126
現在の C++ はリフレクション系の機能が弱くてクラスからデータメンバを列挙するというようなことは出来ない。
「全てのメンバに対してやってくれ」というようなことはできない。
ただ、対象となるメンバを取り出すものさえ用意すればそれを様々な演算に適用することは可能だと思う。
つまり、メンバの列挙を一度で済ませる (なんども列挙しなくてよい) ことは出来るかもしれないってことね。

とはいえそれはそれで割とクソめんどうくせぇメタプログラミングの下準備が要るので
いっそ列挙しまくったほうが簡単かもしれん。
131デフォルトの名無しさん
2021/11/23(火) 17:57:00.33ID:UgBkVfMX
Q_OBJECT とかだとメンバの列挙出来たっけ
132デフォルトの名無しさん
2021/11/23(火) 23:10:58.29ID:G9Rlesey
>>121
駄目なんじゃないかと思う
std::chronoはtime_pointを抽象化してタイムゾーンの異なる時刻間の差分を自動で取り扱いたい(そういう思想な)はずで、
ということはローカルタイムを扱う手段としてzoned_timeは無くてはならないピースとみなさざるおえない

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

ライブラリ仕様の理想が高邁すぎるか実装側の怠慢によって大事な用途において糞ライブラリになってしまっている例
133デフォルトの名無しさん
2021/11/23(火) 23:41:07.98ID:mX+uwseB
何が出来ないと言っているのかまるで分からん
出来る部分と出来ない部分の切り分けがいるんでないの?
134デフォルトの名無しさん
2021/11/24(水) 00:03:21.95ID:EdXujyLt
time_point(事実上UTC)とローカルタイムの相互変換がstd::chronoが思想的に目指しているほど安全にはできない
zoned_timeが実装されない限り

time_point(事実上UTC)同士の比較や差分はzoned_timeが実装されてないバージョンでも安全にできる
135デフォルトの名無しさん
2021/11/24(水) 00:18:07.67ID:HKyZluCV
そんなアバウトな情報いらん
136デフォルトの名無しさん
2021/11/24(水) 00:31:14.95ID:EdXujyLt
えっと、>>135はUTCとローカルタイムの変換ってわかります?
137デフォルトの名無しさん
2021/11/24(水) 00:39:36.48ID:EdXujyLt
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を使わずにそれをやる手段が見当たらない
138デフォルトの名無しさん
2021/11/24(水) 00:44:19.87ID:jtZYcQVF
C++20より前のchronoはタイムゾーンのこと知らんからな…
139デフォルトの名無しさん
2021/11/24(水) 01:06:29.20ID:HKyZluCV
>>99で聞かれてるのは「日時を数値に変換」だろ?
前提も条件も全部曖昧で、自然とか思想とか思い込みばかり
何を使うと何が出来て何が出来ないを全く説明してない
140デフォルトの名無しさん
2021/11/24(水) 01:21:45.20ID:Jllasahs
chronoはローカルタイムを扱えない、と言ってると思うよ
141デフォルトの名無しさん
2021/11/24(水) 02:40:02.07ID:xFDMAHHD
C++相談室 part158 YouTube動画>1本 ->画像>3枚
C++相談室 part158 YouTube動画>1本 ->画像>3枚
142デフォルトの名無しさん
2021/11/24(水) 03:00:57.55ID:P1gN11rG
ローカル時刻かUTCか以前の問題として、そもそもどんなフォーマットで数値に変換するのか
それが不明だったから誰も回答しなかったのだろうに

あとドキュメント信じる限りじゃzoned_timeはVS2019 16.10から使えるってよ
143デフォルトの名無しさん
2021/11/24(水) 03:04:53.60ID:Q5JPayEq
C++は糞
std::は糞ばかり
boost最強
まで読んだ
144デフォルトの名無しさん
2021/11/24(水) 03:08:01.30ID:Q5JPayEq
>>142
>>100 が悪い
145デフォルトの名無しさん
2021/11/24(水) 04:22:29.20ID:xFDMAHHD
じゃ、もうtime_t使っとけ
146デフォルトの名無しさん
2021/11/24(水) 05:14:05.40ID:ZtAViqSQ
「良い感じの関数」なんて今流行りwのAIとか使わんと無理でしょ
147デフォルトの名無しさん
2021/11/24(水) 07:01:18.14ID:xQvD3wWY
確かにchronoは今一だね
filesystemはthread, iomanipとの連携が悪すぎ
使いにくいったらありゃしない
148デフォルトの名無しさん
2021/11/24(水) 07:01:39.82ID:xQvD3wWY
- filesystemは
+ tilesystemや
149デフォルトの名無しさん
2021/11/24(水) 08:47:11.69ID:xQvD3wWY
auto p = (void*)[]{};
これが通らないんだけど
stateless-lambdaは関数と見なせない?
150デフォルトの名無しさん
2021/11/24(水) 09:11:02.53ID:083KFMkM
auto p = (void*)(void (*)())[]{};
151デフォルトの名無しさん
2021/11/24(水) 09:17:04.13ID:xFDMAHHD
auto p = []()->void*{};
もう少し学習しろ
152デフォルトの名無しさん
2021/11/24(水) 10:46:50.00ID:kXzWnsgO
何がしたいんか知らんけど
auto p = [](){};
auto p = []()->void*{};
auto p = []()->void{};
本人の意図が判らんことには絶対に正解に辿り着けない質問大杉
153デフォルトの名無しさん
2021/11/24(水) 11:11:35.49ID:xQvD3wWY
void func1(void*);
void func2(){}
func1(func2);
のようなことをしようとしてて怒られるから
func1((void*)func2);
にしてた

で、func2で名前空間を汚染したくないから
stateless-lambda使おうと思った
154はちみつ餃子 ◆8X2XSCHEME
2021/11/24(水) 11:25:51.06ID:nY9AsqgQ
関数 (関数ポインタ) を void* で受ける雑なことをしといて名前空間を汚すのは気にするのか。
まあフレームワークとかの側でそうなってたら仕方ない場合もあるけど……。
155デフォルトの名無しさん
2021/11/24(水) 11:28:11.15ID:P1gN11rG
variant的なことを昔ながらの方法でやっているのかもしれない
156デフォルトの名無しさん
2021/11/24(水) 11:41:52.30ID:kXzWnsgO
auto p = []()->void*{return NULL;};
↑これはOKだが
auto p = []()->void*{};
↑こっちはコンパイルエラーにして欲しいよね
157デフォルトの名無しさん
2021/11/24(水) 11:48:13.06ID:jtZYcQVF
単にステートレスラムダを関数ポインタに変換したいならこういう有名なハックがある
auto p = +[]{};
158デフォルトの名無しさん
2021/11/24(水) 12:47:46.56ID:xQvD3wWY
>>157
おお、これはいい
dx
159デフォルトの名無しさん
2021/11/24(水) 12:55:27.21ID:xQvD3wWY
ポインタに単項プラスなんぞ考えたこともなかった
void test(char* p)
{
cout << +p << endl;
cout << *+p << endl;
cout << *(0+p) << endl;
cout << 0[p] << endl;
}
160デフォルトの名無しさん
2021/11/24(水) 15:19:51.62ID:083KFMkM
生配列をポインタに変換するときも単項+使うね
161デフォルトの名無しさん
2021/11/24(水) 15:33:19.13ID:kXzWnsgO
>>160
何が嬉しいの
162デフォルトの名無しさん
2021/11/25(木) 09:42:14.59ID:r5Heuy4P
C++11 や C++17 や C++20 とかどのオプションでコンパイルされているかを
コンパイル中に判断したいのですが
ソースコード中にどう書けばよいのですか
163デフォルトの名無しさん
2021/11/25(木) 10:11:07.71ID:r5Heuy4P
解決
https://docs.microsoft.com/en-us/cpp/build/reference/std-specify-language-standard-version?view=msvc-160
_MSVC_LANG
164デフォルトの名無しさん
2021/11/25(木) 10:12:19.59ID:lTzmbhqT
全然解決してなくて草
165デフォルトの名無しさん
2021/11/25(木) 11:00:47.97ID:nZfwh6w7
>>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と書くだけですませられる
どっちが分かりやすいかはさておき
166デフォルトの名無しさん
2021/11/25(木) 11:28:16.28ID:pIkhaGD2
__cplusplus マクロ見るんじゃね?普通は
あとは言語機能ごとのマクロ見たり
167デフォルトの名無しさん
2021/11/25(木) 11:38:56.35ID:lTzmbhqT
まるで間違ってて草
168デフォルトの名無しさん
2021/11/25(木) 13:18:45.98ID:U2fItJ5c
>>165
<iostream>いらないね

それとlvalue transformationがかかる場面で
わざわざ単項プラスを使う必要性が
そのサンプルでは示せてないようだが
169デフォルトの名無しさん
2021/11/25(木) 14:43:49.72ID:Ts2h3uwp
みんなテキトーだなー(棒)
170はちみつ餃子 ◆8X2XSCHEME
2021/11/26(金) 02:28:38.10ID:qCsl9kRb
>>166
処理系がちゃんとそのへんのルールを守ってくれればいいが現実は非情である。
171デフォルトの名無しさん
2021/11/26(金) 21:22:58.84ID:Hq7eoo6P

172デフォルトの名無しさん
2021/11/27(土) 03:24:08.24ID:ymghmbi1
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.

http://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/
173デフォルトの名無しさん
2021/11/27(土) 04:01:44.14ID:7zx+CKid
いまさらかよ
174デフォルトの名無しさん
2021/11/27(土) 12:26:56.81ID:tS+5RcHX
マジかよ知らなかった
GCCくんさぁ…
175デフォルトの名無しさん
2021/11/27(土) 13:29:25.44ID:at/FeDW1
>>174
初心者?
176デフォルトの名無しさん
2021/11/27(土) 14:01:53.67ID:7zx+CKid
リナスもg++の設計にはイラチMAXの筈だわ
177デフォルトの名無しさん
2021/11/27(土) 15:41:12.47ID:dxTMcmeT
Rust厨に弱みを魅せるな
178デフォルトの名無しさん
2021/11/27(土) 16:22:10.07ID:GY7utvzm
よわみにはつけこまれる
179デフォルトの名無しさん
2021/11/28(日) 21:05:38.19ID:6joWVJIB
C++でblas, lapackを使うのにいいインターフェースってどれでしょうか?
調べてたらCppLapack, Lapack++、armadillo とか出てきましたが、定番さとか使いやすさとか教えていただけると嬉しいです

とりあえずは複雑なことはしない予定で、行列の掛け算とか対角化ぐらいが簡潔に書けると嬉しいです
180デフォルトの名無しさん
2021/11/29(月) 00:38:26.49ID:UEkaTEcQ
久しぶりにC++再開したが
昔からだが
PHPはC++のスクリプト版といえるかのように文法・関数が似てるから
プロトタイプをPHPで作成したほうが時短になるかと?
仮想コードによるアルゴリズムの記述やフローチャートなどに近い
181デフォルトの名無しさん
2021/11/29(月) 00:43:30.91ID:UEkaTEcQ
行列の掛け算とか対角化ならPythonかマキシマでいいとおもうが?
大規模だともしかしたらC++のほうが早いかもしれないが
PythonだとGoogle ColaboratoryとかでGPUをネットワーク使用できたりするが



Colaboratory とは
Colaboratory(略称: Colab)は、ブラウザから Python を記述、実行できるサービスです。次の特長を備えています。
環境構築が不要
GPU への無料アクセス
簡単に共有
https://colab.research.google.com/notebooks/welcome.ipynb
182デフォルトの名無しさん
2021/11/29(月) 01:05:44.61ID:roEk3hNb
宣伝はお断りしています
183デフォルトの名無しさん
2021/11/29(月) 06:13:36.91ID:i8Ax0msm
>>179
BLASというとvalarrayだね
184デフォルトの名無しさん
2021/11/29(月) 11:31:29.88ID:W4Pu+K5+
>>183
は?
185デフォルトの名無しさん
2021/11/29(月) 14:27:16.33ID:Afxc3rI9
>PHPはC++のスクリプト版といえるかのように文法・関数が似てる

迷惑するから出鱈目言うな
186はちみつ餃子 ◆8X2XSCHEME
2021/11/29(月) 14:43:58.00ID:cgXmRWbT
因果が逆だろう。
似た使い方しかしない人間にとっては似て見えるということもあるんだろうさ。
187デフォルトの名無しさん
2021/11/29(月) 14:54:09.52ID:Swm9PZmw
いや激しく誤解を生む情報だと思うw
188デフォルトの名無しさん
2021/11/29(月) 15:15:20.73ID:zo5XubVi
制御構文が似ていれば似ているように見える人というのは一定数いる
それしか使わないから
189デフォルトの名無しさん
2021/11/29(月) 15:19:08.39ID:LzdsKRCS
C++のこともphpのことも両方ニワカじゃないとなかなか出てこない発言
昨日今日入門書めくってるくらいのレベルじゃないとなかなかできない発言
190デフォルトの名無しさん
2021/11/30(火) 09:50:00.96ID:abbimJAH
template<class T>
void f(T x) {
auto a = x, b = 0;
}

f(0.0);

これgccだとコンパイル通るけど規格的にはダメだよね?
191デフォルトの名無しさん
2021/11/30(火) 09:57:35.75ID:+4eAilPB
ok
192デフォルトの名無しさん
2021/11/30(火) 10:46:34.33ID:LDqTXpbe
何が駄目になるの?
193デフォルトの名無しさん
2021/11/30(火) 10:48:39.10ID:b4Wv8Im2
autoの推定がxから導かれるdoubleと0から導かれるintで矛盾しないかって話
194デフォルトの名無しさん
2021/11/30(火) 10:51:24.87ID:icNXz82r
そもそも何の規格だよ
問題あるなら書き直せばいいだろ
195デフォルトの名無しさん
2021/11/30(火) 10:58:47.10ID:b4Wv8Im2
>>190
clは弾くぞ
196デフォルトの名無しさん
2021/11/30(火) 11:18:37.50ID:rIKeeiBO
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 であると読める
197デフォルトの名無しさん
2021/11/30(火) 11:29:55.04ID:dtpnJADB
https://wandbox.org/permlink/GOps3Ikgl1VsvwoU
gcc6.3.0以下とclangだとちゃんとエラーになるな
198デフォルトの名無しさん
2021/11/30(火) 11:33:54.11ID:dtpnJADB
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79009
199デフォルトの名無しさん
2021/11/30(火) 11:34:06.53ID:LDqTXpbe
0の部分static_castしなきゃ駄目ということか。なるほど
200デフォルトの名無しさん
2021/11/30(火) 13:11:18.23ID:b4Wv8Im2
g++ 10.3.0は-pedantic指定しても通すな
201デフォルトの名無しさん
2021/11/30(火) 13:27:36.30ID:icNXz82r
バカか
0は何にだって成れるだろ
202デフォルトの名無しさん
2021/11/30(火) 13:38:43.96ID:rrAtEbdN
C++とPHPが似てないというニカワかと?
Pythonやルビーやjavascriptよりも似てるだろ?
C++にある関数をそのままPHPでも使えるようにしてあるのが多いし
203デフォルトの名無しさん
2021/11/30(火) 13:39:41.94ID:b4Wv8Im2
>>201
これやってみ
cout << typeid(0).name();
204デフォルトの名無しさん
2021/11/30(火) 14:06:04.92ID:+4eAilPB
>>202
そんなだから馬鹿って言われるんだ
205デフォルトの名無しさん
2021/11/30(火) 18:50:06.68ID:5lYBSuU/
C++Builder使った後にVisual Studio使って、
二層作ったらC++Builderがめちゃくちゃ簡単で
作りやすかったんですけど私の感覚、何か変?
Visual Studioより効率いい気がしました。
206デフォルトの名無しさん
2021/11/30(火) 19:29:52.87ID:32XX4NDe
20年以上前ならいざしらず今C++Builderなんて使おうとする人は変としか・・・
207デフォルトの名無しさん
2021/11/30(火) 19:37:40.43ID:TJjyIr2u
普通はRust使うよね。
208デフォルトの名無しさん
2021/11/30(火) 19:38:36.27ID:ARnSQzz0
くそ言語Rust
209デフォルトの名無しさん
2021/11/30(火) 19:52:55.16ID:icNXz82r
c#だろ
バカめが
210デフォルトの名無しさん
2021/11/30(火) 20:01:01.54ID:xp1LudPy
20年以上前は言い過ぎ
自分は2009を大事に使っている
211デフォルトの名無しさん
2021/11/30(火) 21:27:19.33ID:32XX4NDe
うちでは2000年以降のborlandはそれ以前に開発されたものの保守以外で使用することはなかったから
2000年以前でもほぼMSVCの独壇場だった
212デフォルトの名無しさん
2021/11/30(火) 21:31:10.33ID:XVXDilRK
BuilderというよりRAD Studioやろ?
213デフォルトの名無しさん
2021/12/01(水) 23:25:36.03ID:toM1ybPg
>>14
数学記号増やしたところで、数学記号はレイアウトの問題がかなりついて回るのであまり意味ないと思うけどなあ。2^2^2^2とか、定積分とか、分数とか表現できないでしょ。
そういうのは組版の問題。
まあ、たしかにイタリックのxとかはあるのに、イタリック(?)のπはないとかは、中途半端な気はするけどね。
214デフォルトの名無しさん
2021/12/02(木) 08:09:16.16ID:5C7dh5cI
std::set にラムダ式渡すとき
std::set<T, decltype(comp)> s(comp);
ってなるのダサすぎるんだけどどうにかならない?
std::set<T> s([](T x, T y) { return x < y; });
みたいに直接書きたい

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

あとこれが自作クラスだった場合推論補助とかでどうにかできるんだろうか
215デフォルトの名無しさん
2021/12/02(木) 08:50:46.97ID:boATToTk
>>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に失敗するね
216デフォルトの名無しさん
2021/12/02(木) 08:57:10.12ID:l5gglxms
>>213
だからさー、あなたが使うフォントで期待したπが表示されないのはフォントのデザイナの問題であってunicodeの問題じゃない
ちゃんと区別できるようになってるんだから
217デフォルトの名無しさん
2021/12/02(木) 10:08:07.72ID:0ZST/pCU
>>214 std::function<bool (T,T)> 使っちゃダメなの?
218デフォルトの名無しさん
2021/12/02(木) 15:14:03.44ID:2R2gcOCs
πの人まだいたんだなω
219デフォルトの名無しさん
2021/12/02(木) 16:55:10.70ID:BMPRSKoA
>>216
どうでもいい絵文字よりは、数学記号は考慮してほしかったですよね
というかピクトグラムの意味がわかりません、漢字の方がマシ
220デフォルトの名無しさん
2021/12/02(木) 18:05:22.46ID:X/wGilGd
>>219
>>46

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

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

で、何だっけ?
イタリック(?)のπはない、だったっけ?
221デフォルトの名無しさん
2021/12/02(木) 18:17:52.07ID:BMPRSKoA
>>220
せめて
https://meta.wikimedia.org/wiki/Help:Displaying_a_formula/ja
に載っている文字は全部表示してほしいですね… >>220 は全然足りないとおもいますよ
222デフォルトの名無しさん
2021/12/02(木) 19:00:15.54ID:xMkISEUv
>>221
https://www.compart.com/en/unicode/search?q=math#blocks
なんか抜けているのあったっけ?

Arrowをmath専用にして欲しいとか?
https://www.compart.com/en/unicode/search?q=arrow#blocks
223デフォルトの名無しさん
2021/12/02(木) 20:38:05.02ID:MbA5frdV
>>214
std::set s(std::initializer_list<T>{}, [](T x, T y){return x < y;});
とかどうやろ
224デフォルトの名無しさん
2021/12/02(木) 20:50:59.39ID:rnInpLg+
>>215
ありがとう
悲しい
>>217
比較関数って内部でめちゃくちゃ呼ばれるんでパフォーマンスが気になっちゃう
>>223
なるほどTも推論させればいいのか
トリッキーだけど一番思ってたのに近いかも、ありがとう
225デフォルトの名無しさん
2021/12/02(木) 23:20:50.87ID:kbM6t4K6
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
226デフォルトの名無しさん
2021/12/05(日) 09:34:11.45ID:nrpyYaDv
(float) std::sin(3.14);
これの三角関数の左の(float)ってどういう意味ですか??
227デフォルトの名無しさん
2021/12/05(日) 09:47:34.80ID:s0V2liBt
キャストでぐぐれ
228デフォルトの名無しさん
2021/12/05(日) 11:30:58.25ID:nrpyYaDv
あなるほど
C形式のキャストでdoubleからfloatに変換してるんですね
229デフォルトの名無しさん
2021/12/05(日) 12:19:36.79ID:ZXOJuLfE
× C形式
○ キャスト記法
230デフォルトの名無しさん
2021/12/05(日) 18:20:14.63ID:jjkrjYLo
C形式のキャストでええやろ
C++ならstatic_castでキャストするべきところ
231デフォルトの名無しさん
2021/12/05(日) 18:26:41.52ID:BgqX0HXa
精度がfloatでいいならsinf使え
232デフォルトの名無しさん
2021/12/05(日) 19:23:24.64ID:ZXOJuLfE
>>230
いや、そうではなくJIS規格で定められた用語ってこと

・・・まあね、フレンドが随伴とかちょっと・・・なところあるんだけど
233デフォルトの名無しさん
2021/12/05(日) 20:16:51.63ID:DeLDBVlq
いまだに用語警察っているんだなw
234デフォルトの名無しさん
2021/12/05(日) 20:29:45.29ID:jjkrjYLo
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
235デフォルトの名無しさん
2021/12/05(日) 20:34:58.49ID:CHJdF2OL
用語の間違いで意味の取り違えが起きるような場面ならはっきりさせておくべきだが今回はどうでもいいな。
236デフォルトの名無しさん
2021/12/06(月) 07:47:05.01ID:g0v08EwR
>>234
キャスト形式?
何に対する意見を言っているんだ?
237デフォルトの名無しさん
2021/12/06(月) 08:09:01.81ID:3cd7zaNc
また下らん揚げ足取り君が来たw
238デフォルトの名無しさん
2021/12/06(月) 18:36:58.89ID:g0v08EwR
揚げ足じゃねえよ
話の根幹に拘わることだ

まともに反駁できないなら
黙っているのが得策だぞ
239デフォルトの名無しさん
2021/12/06(月) 21:16:52.28ID:dR0HZDjS
訂正の益があったとしても(今回は全くなさそうだが)用語警察は不要
書き込みの意味が文脈から一意であれば問題ない
黙ってろ
240デフォルトの名無しさん
2021/12/06(月) 21:23:49.13ID:XPddKxbx
constructorとdestructorを常に生成子・消去子と呼んでる者だけがJIS規格を振り回しなさい
241デフォルトの名無しさん
2021/12/06(月) 22:13:15.88ID:Zqmej2qN
オレ用語を高圧的な態度で押しつけてくるやつとは仕事したくねえ
242デフォルトの名無しさん
2021/12/07(火) 00:15:41.50ID:35fMaRJu
>>219
今から考えれば NECのPC-8801 のBASIC言語は数学好きに合っていた。
当時のNECの社長は、東大物理の大学院出の人だったらしい。
その人がTOPにいる間はNECのパソコンは日本で一斉を風靡していたが、
その人が降りてからは、嘘の様に勢いがなくなった。
243デフォルトの名無しさん
2021/12/07(火) 13:20:30.29ID:XtC4oDEh
みんなコルーチン使ってる?
244デフォルトの名無しさん
2021/12/07(火) 13:44:30.14ID:bN2QwYhk
コルーチンはいろいろ制限が多くてな、最近はfiberの方を使ってる
機種依存APIを使う必要がある、実行効率が若干落ちる、スタック用のメモリを大量消費する、トレースデバッグがやりづらい等のデメリットはあるが、
本物のyieldはやっぱ便利よ
245デフォルトの名無しさん
2021/12/07(火) 14:37:49.13ID:RTlriAYU
c+のvectorって無限に要素追加したらどうなりますか?
例えばwhile (1) でemplace_back()し続けた時の挙動です。javaみたいにちゃんとoutofmemoryエラー吐くようにできてますか?
246デフォルトの名無しさん
2021/12/07(火) 14:52:13.72ID:N5mK0FmF
「ちゃんとout of memoryエラーを吐く」というのは突き詰めるとものすごく難しい概念なので、どこまでを求めるかによる
Javaにしても本当にどのレベルまで正しくやれてるのかは知らん
まあ「なんかあったらstd::bad_alloc投げて来るやろ」で99%のケースは事足りると思うけど
247デフォルトの名無しさん
2021/12/07(火) 14:57:50.91ID:xk7e4Rn1
例えば普通のアプリだと、C++とか関係なく最近のOSのメモリ確保は仮想メモリの確保なので、実際にそのアドレスが使われて初めて物理アドレスが確保され、スワップ領域が足りない場合もそのとき検出される。
248デフォルトの名無しさん
2021/12/07(火) 14:57:56.04ID:Z6YBtzSC
mallocに失敗すればbad_allocが投げられるが
実際のところmallocが失敗するときにできることは殆ど無いと認識している
249デフォルトの名無しさん
2021/12/07(火) 15:01:16.11ID:i9OSA5UU
>>179
そもそも C++ から Fortran で書かれてるオリジナルの BLAS とか LAPACK を呼ぶこともできるのだから、その辺は別に何でも良い

そんなことよりも多次元配列をどう持つかの方が C++ にとっては難しい課題だ
Cの多次元配列や一次元配列として持つのはユーザ側の負担が大き過ぎる
boost の multi_array は放置されている (move セマンティクスに対応してすらない)
xtensor みたいなサードパーティのものをわざわざ使うのも…… (つーかどれもパッとしない)
早く多次元配列くらい公式で用意してほしい
250デフォルトの名無しさん
2021/12/07(火) 15:42:17.22ID:bN4twrqH
多次元といっても中身掛け算の一次元だしな
251デフォルトの名無しさん
2021/12/07(火) 16:20:01.36ID:m1NjLpbT
class foo : vector<mystruct>
みたいなクラスを作っているんだけど
クラス内の関数で自身の配列の構造体の関数を呼ぶにはどうしたらいいんだろう?

this[a]->set(0);
と書いてもメンバーがありませんと出て困ってます😭
252デフォルトの名無しさん
2021/12/07(火) 16:24:10.42ID:bN4twrqH
(*this)[a]->set(0);
253デフォルトの名無しさん
2021/12/07(火) 16:32:15.84ID:m1NjLpbT
>>252
ありがとう!ちょっと直したけど
(*this)[a].set(0);
でできました、超助かりました!チュッ!
254デフォルトの名無しさん
2021/12/07(火) 17:48:46.48ID:D9y2bkeI
そういうときはat()使ってる
255デフォルトの名無しさん
2021/12/07(火) 18:03:51.96ID:bN4twrqH
atは範囲チェック分鈍くなるの我慢出来るなら有
あと例外飛ばすからtry〜catch節必須
256デフォルトの名無しさん
2021/12/07(火) 20:03:22.82ID:CgArR1cc
>>248
bad_alloc is not out-of-memory!
https://wg21.link/P1401
257デフォルトの名無しさん
2021/12/07(火) 21:29:05.30ID:C8BO015l
std::vectorのデストラクタはvirtualじゃないから気を付けてね、念のため
258デフォルトの名無しさん
2021/12/07(火) 22:45:19.35ID:eXh2WItM
abort()したら生きている自動オブジェクトは
どうなってし
まいますの?
259デフォルトの名無しさん
2021/12/08(水) 00:17:43.36ID:19ueGHR5
#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
260デフォルトの名無しさん
2021/12/08(水) 00:51:11.41ID:x9fXkANc
abortより例外飛ばした方が確実だな(VC++6.0を除く
261デフォルトの名無しさん
2021/12/08(水) 07:27:41.53ID:HL2646/9
>>258
デストラクタは実行されない
問答無用で強制終了
電源ぶっちするようなもん
262デフォルトの名無しさん
2021/12/08(水) 07:58:51.26ID:ZH5V4J5Q
多次元配列 (mdspanだっけ) ってまだSTLに入らんの?
線形代数アルゴリズムはBLAS、LAPACKはじめ外部のライブラリに頼らざるを得ないんだから、最小限の機能だけ備えた取り回しの良いライブラリをさっさと入れちゃえば良いのに

この機械学習全盛の時代に置いてかれるよね
263デフォルトの名無しさん
2021/12/08(水) 10:00:58.02ID:19ueGHR5
機械学習全盛なの?
264デフォルトの名無しさん
2021/12/08(水) 13:49:53.98ID:juXg17Zg
ああいうライブラリってプラットフォームにべったり依存してるんじゃないの
265デフォルトの名無しさん
2021/12/08(水) 13:51:20.15ID:ADK1Cn8m
GoogleのGPUがオンラインで無料でつかえるぞ
Python言語だが
266デフォルトの名無しさん
2021/12/08(水) 13:56:11.42ID:ADK1Cn8m
C言語とかローカルの言語からGoogleのGPUを操作できれば
ローカルで実行してるのと大差なくできると今おもったが
探せばすでにそういったAPIとかある気はしたが
267デフォルトの名無しさん
2021/12/08(水) 14:21:17.05ID:19ueGHR5
スレ違い。
Google Colaboratoryはjupyter notebook使えればいいだけ。
!や%%で大抵のことは出来る。
268デフォルトの名無しさん
2021/12/08(水) 16:19:48.22ID:ZH5V4J5Q
>>264
どういうライブラリ?
269デフォルトの名無しさん
2021/12/09(木) 00:00:00.18ID:y//gPIop
>>260
例外飛ばしたら今度はCの関数が処理の途中でぶっちされるやん……?
次のような場合:
foo() // C++で記述、例外をスロー

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

baz() // C/C++で書かれた呼び出し元
270デフォルトの名無しさん
2021/12/09(木) 01:16:56.11ID:nwscR4Pq
構造体を関数の中で宣言して戻り値に入れたら
呼び出した側が受け取った値はどこかで開放しないといけないですか?
271デフォルトの名無しさん
2021/12/09(木) 01:43:46.28ID:9kW8IukA
なんで最近こんな無茶苦茶なの?
>>269
質問は「生きている自動オブジェクト」がどうなるかであり、例外でスコープから抜ければC/C++だろうと破棄される
>>270
「関数の中で宣言」とはどういうこと?
「受け取った値」はどうやって確保されたの?
ちゃんと伝えられないならコードで質問しないと伝わらない
272デフォルトの名無しさん
2021/12/09(木) 07:16:10.87ID:Gl3ymjyg
>>270
要らない
構造体はintなんかと同じでコピーされるから
273デフォルトの名無しさん
2021/12/09(木) 09:45:40.72ID:nwscR4Pq
>>272 >>271
ありがとう!助かりました

C#でGC慣れしているので
正直この辺はなかなか理解が進まなくて…
ESP32が面白くてC++を始めたんだけど
いざ自分であれこれ作ろうとすると
わからない部分が多すぎて申し訳ない
274はちみつ餃子 ◆8X2XSCHEME
2021/12/09(木) 10:43:53.70ID:XwSSuf4e
そこらへんのメカニズムはどんな入門書にでも書いてあるはずだよ。
C# の経験があると C++ の入門書では重複する考え方も多くて馬鹿らしく思うかもしれないけど、
似て非なる機能や用語で混乱しないためには基礎から学んだほうがいい。
275デフォルトの名無しさん
2021/12/09(木) 11:33:51.67ID:WBF8gVdC
newを知っててもdelete知らなかったりするからな
276デフォルトの名無しさん
2021/12/09(木) 11:45:45.22ID:kWV4UehO
そこらじゅうにうんこをばらまいておいて誰かが始末してくれると信じているというわけか
277デフォルトの名無しさん
2021/12/09(木) 12:14:01.37ID:WBF8gVdC
やつらメモリーリークという言葉自体知らなかったりするから
278デフォルトの名無しさん
2021/12/09(木) 17:58:28.95ID:0JFBEVvg
GC言語でもファイルのcloseはあるから
C++はメモリもあれと同じでnewした物は全部責任持ってdeleteしなきゃならないんだよって教えるんだけど
みんなこの世の終わりみたいな顔する
279デフォルトの名無しさん
2021/12/09(木) 18:13:01.83ID:jWh05eno
>>275
w
280デフォルトの名無しさん
2021/12/09(木) 20:34:39.79ID:XclkFwFR
おまいら「よう、うんこ掃除屋」
unique_ptr「…」


10年後、人類はAIの反乱で滅亡するのでした
281デフォルトの名無しさん
2021/12/09(木) 21:19:33.80ID:JHQQMY8Y
コンピューターの計算だから正しいっ!!
282デフォルトの名無しさん
2021/12/09(木) 23:56:02.90ID:y//gPIop
>>271
Cのは
破棄されない
283デフォルトの名無しさん
2021/12/09(木) 23:59:22.21ID:9kW8IukA
>>282
Cで書かれてるならデストラクタなどはないのでメモリ解放で破棄
284デフォルトの名無しさん
2021/12/09(木) 23:59:43.06ID:y//gPIop
Cの構造体はunwindされずただぶっちされるだけ
コードの実行がぶっちされるのはC/C++共通う
285デフォルトの名無しさん
2021/12/10(金) 00:07:01.17ID:4mUmJ7za
自身を適切に開放なり後始末なりするデストラクタを持たないオブジェクトは例外でほぼ等しく致命傷を負う
そういうデストラクタを持っているつもりでも、コードの実行順がぶっちされることにより、
プログラマーの不注意ですぐ致命傷を負う
286デフォルトの名無しさん
2021/12/10(金) 00:28:44.05ID:G7csYfUf
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
287デフォルトの名無しさん
2021/12/10(金) 00:29:59.22ID:G7csYfUf
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++ではスコープから外れればデストラクタが呼ばれた後にメモリが開放される
288はちみつ餃子 ◆8X2XSCHEME
2021/12/10(金) 01:18:14.66ID:ogq0Brkp
JavaScript でリソースを解放 (GC で回収) するために
変数に false を代入して参照を切っているのを見たことが有って、
GC があってもこの手のバッドノウハウは要るんだなと思いました。 (小並感)
289デフォルトの名無しさん
2021/12/10(金) 01:52:31.83ID:eLt0CNh3
GCが正常に機能しているという保証がそもそもないから
そもそも何が正常な動作なのかを誰も責任とらない架空の権威によって成り立っている
290はちみつ餃子 ◆8X2XSCHEME
2021/12/10(金) 01:58:44.76ID:ogq0Brkp
メモリ回収のタイミングが保証されないのは大した問題ではない
(プロセスが終了すればどうせ回収されるので)
のだが、外部のリソースを掴んでいるときに後始末されないかもしれないのは困るな。
291デフォルトの名無しさん
2021/12/10(金) 02:33:47.50ID:eLt0CNh3
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が道連れクラッシュして困ってるってだけなんだが
292デフォルトの名無しさん
2021/12/10(金) 05:50:56.28ID:iiZD81ri
多人数のプロジェクトほどuniqueではなくshard_ptrが増えるのはトラブった時に誰も責任取らなくていいからって事?
293デフォルトの名無しさん
2021/12/10(金) 07:04:02.57ID:eLt0CNh3
shared_ptrを乱用する職業PGよりもweak_ptrを使いこなせる厨二PGたれ
主従関係がある場合、主が従のシェアポを持ち、従が主のウイポを持て
294デフォルトの名無しさん
2021/12/10(金) 07:11:56.68ID:eLt0CNh3
多くの職業PGは依存関係を親子関係で騙りたがるが、
生物学上、親は子より先に生まれ先に死ぬのだから、FIFOは成り立つがLIFOは成り立たない
ポリコレ的にはマスター/スレーブではなくプライマリ/セカンダリが望ましいとされる
ルー語の乱用をさけるならばプライマリ/セカンダリではなく主/従がなお良い
よって依存関係を主従関係で騙るのが正しい
織豊政権のように、主君の死後に従者が取って代わった例もあるから完全ではないが
295デフォルトの名無しさん
2021/12/10(金) 07:15:52.21ID:eLt0CNh3
秀吉は主君信長のweak_ptrを持っていたので本能寺の変での主君の横死を的確に知ることができた
296デフォルトの名無しさん
2021/12/10(金) 07:35:10.03ID:WKa1d5RR
くだらねえ
喩え話なのはみんなわかってんのに
覚えたての日本語ひけらかしてドヤるな
297デフォルトの名無しさん
2021/12/10(金) 08:04:47.84ID:eLt0CNh3
ルー語の乱用を避けるのが礼儀だぞ
298デフォルトの名無しさん
2021/12/10(金) 08:16:32.12ID:Qqc0ky4z
>>290
そうなんだよね
リソース解放のタイミングが保証されないのは言語設計のミスだった
JavaではファイルやソケットなどのリソースはGCのときに呼ばれるfinalizeで解放すればいいよって思想だったけど
いつfinalizeが呼ばれるのか予測できないことに起因するバグが多発
ついにfinalizeが廃止されることになった

リソースは自前で廃棄してねというスタンス
GCも当初の期待ほどうまくいってない
299デフォルトの名無しさん
2021/12/10(金) 09:48:13.03ID:IPFkCC9z
ファイルやソケットの開放はcloseないしデストラクタでやるのだから保証されてるぞ?
保証されないのはメモリリソースだけ

あとjavaも当初からfinalizeが呼ばれることは保証されてなかったからfinalizeで開放しなさいなんていう慣習はなかったと思うが
300デフォルトの名無しさん
2021/12/10(金) 10:14:08.92ID:eLt0CNh3
JavaはJDBC周りのGCの挙動が厄介だYO
GC性善説に立つと痛い目にあう
301デフォルトの名無しさん
2021/12/10(金) 11:20:58.79ID:Qqc0ky4z
>>299
JavaやC#にはデストラクタないからね
C++経験者がJavaやC#ではファイナライザーを使ったりしてたんだよ
C#ではマイクロソフト謹製標準ライブラリでさえファイナライザーでファイルを閉じるクソコードがある
302デフォルトの名無しさん
2021/12/10(金) 11:32:06.75ID:G7csYfUf
いつまでスレ違いの話続けんの?間違いの指摘すら面倒
303デフォルトの名無しさん
2021/12/10(金) 11:49:22.35ID:/d3oGHTa
C#はファイナライザで解放でいいんだよ
Disposeパターンがそういうスタイルだから
304デフォルトの名無しさん
2021/12/10(金) 11:51:44.78ID:IPFkCC9z
>>301
それはその個人が不勉強なだけだろ…
finalizeが呼ばれないことがあるのはあまりに初歩的なチップスで、初級でない一般的なJavaプログラマがfinalizeだけでリソース開放するとかありえない。
思想って誰の思想?

メモリ解放に気を使わないC/C++プログラマがいないのと同じ
305デフォルトの名無しさん
2021/12/10(金) 12:27:48.66ID:Qqc0ky4z
>>304
その不勉強な個人が多すぎたんでしょ
デストラクタの代わりにファイナライザーを使う誤用が多かった
finalize廃止を決断しなければならないほどにね
306デフォルトの名無しさん
2021/12/10(金) 12:36:42.08ID:WKa1d5RR
C++の轍を踏まないはずが
ざまあねえな
307デフォルトの名無しさん
2021/12/10(金) 12:43:00.40ID:iN+TjAqi
>>ID:Qqc0ky4z
>>298
>JavaではファイルやソケットなどのリソースはGCのときに呼ばれるfinalizeで解放すればいいよって思想だったけど
>>301
>C#ではマイクロソフト謹製標準ライブラリでさえファイナライザーでファイルを閉じるクソコードがある
>>305
>その不勉強な個人が多すぎたんでしょ
上記発言を見ればあなたが不勉強なのはわかったよ
308デフォルトの名無しさん
2021/12/10(金) 16:09:36.14ID:nNdO4jXs
vectorのaが空じゃないと思い込んでて実は空の状態で
for (int i =0; i < a.size()-1; i++)
これやると一瞬でオワるのなんとかならないかな
まあ普通はa.sizeをintやらでキャスりましょーって話だとは思うけど
そもそもsizeの型がuなのが悪いと思うんだが
uじゃなきゃ足りないくらいの要素数確保することなんてあんのか?ぁん?
309デフォルトの名無しさん
2021/12/10(金) 16:21:05.76ID:UbGkGPEB
i+1<a.size()
310デフォルトの名無しさん
2021/12/10(金) 16:24:59.62ID:4aSHek6G
または、if(!a.empty()) for(...)
311デフォルトの名無しさん
2021/12/10(金) 16:26:11.66ID:nNdO4jXs
>>309
てんさいかよ
312デフォルトの名無しさん
2021/12/10(金) 16:40:04.25ID:UbGkGPEB
C++20にはstd::ssize()もあるぞ
313デフォルトの名無しさん
2021/12/10(金) 16:46:05.19ID:PJTDipJe
i <= a.size()-1じゃなくて i < a.size()-1?
314デフォルトの名無しさん
2021/12/10(金) 16:54:00.86ID:eLt0CNh3
以下のような直感的でベタな条件式のほうがいいと思うよ
for (int i =0; a.size() > 0 && i < a.size()-1; i++)
315デフォルトの名無しさん
2021/12/10(金) 16:56:40.50ID:eLt0CNh3
一見すると小学生の書いた作文っぽく見えるコードが結局のところ一番良い
厨二を拗らせたような難解なコードは避けよう
316デフォルトの名無しさん
2021/12/10(金) 16:58:49.17ID:UbGkGPEB
このループ内でa[i]とa[i+1]を使ってなんかするんだろ
a[i+1]が有効なインデックスか?という条件がi+1<a.size()でこれは自然
317デフォルトの名無しさん
2021/12/10(金) 17:19:52.62ID:PJTDipJe
ああ、それなら納得
318デフォルトの名無しさん
2021/12/10(金) 17:20:02.15ID:qnyfSMbx
なんで-1してるの?
319デフォルトの名無しさん
2021/12/10(金) 18:23:30.43ID:31VztrOJ
出典忘れたけどsizeが符号無しなのは標準委員会も失敗だったと考えてるらしい(?)
320デフォルトの名無しさん
2021/12/10(金) 20:12:16.24ID:AEk60g9j
まあ、そうでなきゃssize_tなんて恥ずかしいもの後付けしたりしないし
321デフォルトの名無しさん
2021/12/10(金) 20:26:39.77ID:4aSHek6G
>>314
二回余計な比較にクロックを喰われる
322デフォルトの名無しさん
2021/12/10(金) 21:01:58.48ID:G7csYfUf
最近このスレやばない?
intじゃなくてstd::vector<...>::size_typeでいい
>>310は明らかに間違ってる
1引くケースは大抵サイズ2以上がよくある事前条件なので普通事前に弾く
ループ内や別スレッドでvectorが変更されないケースならループの外で1引いた方が速い
今回ssize_tは無関係
323デフォルトの名無しさん
2021/12/10(金) 21:13:20.54ID:4aSHek6G
>>322
どこがヤバイの?
普通に動くし
324デフォルトの名無しさん
2021/12/10(金) 21:27:52.13ID:G7csYfUf
>>323
列挙したところ。普通にレベルがやばい。
>>310はwhile(!a.empty())と書いてるのかと思ってたので俺の勘違い。
何が普通に動くの?
325デフォルトの名無しさん
2021/12/10(金) 21:33:24.42ID:4aSHek6G
>>324
いや、間違えてるとか言われてたからな
頭の中で動かしてみて問題なく普通に動くだろうと
ってなんでお前そんなにエラそうなの?エラが張ってる民族か?
326デフォルトの名無しさん
2021/12/10(金) 22:00:02.92ID:G7csYfUf
>>325
聞かれたから答えたけど会話にならんな・・・この辺で
327デフォルトの名無しさん
2021/12/10(金) 22:00:16.81ID:caXqow3a
どうしたらいいかご意見を聞かせてください!٩( ᐛ )و

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

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

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

先にお礼申し上げます。ありがとうございます。
328デフォルトの名無しさん
2021/12/10(金) 22:05:57.88ID:4aSHek6G
>>326
もとはといえオメェが勘違いしたからだろこのヒトモドキが
329デフォルトの名無しさん
2021/12/10(金) 22:09:42.92ID:G7csYfUf
>>327
再現コードをどこかに貼って。伝わらない。
>>328
煽ってるだけじゃんw だから会話にならないんだよw
330デフォルトの名無しさん
2021/12/10(金) 22:20:49.71ID:Yfltgwdt
>>322
普通事前に弾くとかドヤ顔で言われてもそんなの200も承知の助なんだよ
ああいう不測な組み方で死にかねない爆弾抱えるデメリットに比べたら
unsignedなことによるメリットなんて実質ほぼないカスみたいなもんだからsizeがunsignedなのは設計ミスではって話
331デフォルトの名無しさん
2021/12/10(金) 22:23:19.44ID:caXqow3a
申し訳ございません( ✌︎'ω')✌︎
遅れましたがこれです。
プッシュバックでエラーががが

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

int main ()
{
std::vector<hoge> vHoge;
hoge hoge001;
vHoge.push_back(hoge001);
}
332デフォルトの名無しさん
2021/12/10(金) 22:24:50.14ID:caXqow3a
大文字になってしまった……
struct Toge >>> struct toge
と思っていただければ……
333デフォルトの名無しさん
2021/12/10(金) 22:34:31.10ID:iN+TjAqi
vHoge.push_back(std::move(hoge001));
334デフォルトの名無しさん
2021/12/10(金) 22:36:13.76ID:AEk60g9j
vectorに突っ込んだらもうhoge001は使わないんだったらvHoge.push_back(std::move(hoge001));

コピーさせたいならhogeにこんなコピコンとコピop=を定義しとけばいい
hoge(const hoge& other) : toge1(new toge(*other.toge1)){}
基本はmoveだけど時々コピーもしたいくらいなら特殊関数じゃなくてclone()みたいな関数にしておく
どれがいいかは本当の用途と目的で選んで
335デフォルトの名無しさん
2021/12/10(金) 22:37:31.61ID:G7csYfUf
>>332
コンパイルエラーを直してください
https://ideone.com/RxQYii

>>330
承知してるなら弾け
今回の用件はsize_type使えばいいだけなのでunsignedかどうかは関係ない
336はちみつ餃子 ◆8X2XSCHEME
2021/12/10(金) 22:52:51.98ID:ogq0Brkp
>>327
> hogeのコピーコンストラクタにmemcpyを使う等の解

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

型が trivially copyable の要件を満たすときだけ memcpy でのコピーが許されている。
337デフォルトの名無しさん
2021/12/10(金) 23:02:05.91ID:4aSHek6G
>>335
オメェが直して差し上げろよ
本人それで困ってんだからよ
338デフォルトの名無しさん
2021/12/10(金) 23:18:01.33ID:G7csYfUf
>>337
なんだか煽ってばかりですね。質問内容は明快にしないといけないので。
339デフォルトの名無しさん
2021/12/10(金) 23:22:36.91ID:4aSHek6G
ああ言えば上裕
オメェそっくり
340デフォルトの名無しさん
2021/12/10(金) 23:40:14.88ID:Yfltgwdt
>>335
いや関係大ありだから
ないって言い張るならsizeがunsignedなメリット挙げてみなよ、ないでしょ
341デフォルトの名無しさん
2021/12/10(金) 23:41:07.01ID:caXqow3a
>>333
>>334
お風呂に入っており返信が遅くなりました。
なんてお礼を言ったらいいか、std::moveで解決しました。
自分の知識不足ではありますが、素早い返信に感謝でございます(〃ω〃)
生成したユニークポインタはベクターに移せれば使い捨てのでムーブで良さそうです。
std::moveについて調べてみます!

>>336
ありがとうございます。
メモコピーで解決するというページがあったのですが、正直機序がわからず不安でした(笑)
シェアードポインタかムーブで対応したいと思います。
有難うございました。
342デフォルトの名無しさん
2021/12/10(金) 23:49:32.55ID:aT/chChl
>>308
普通は範囲forじゃないの?
性能とかで差分あったっけ。
343デフォルトの名無しさん
2021/12/10(金) 23:57:06.57ID:G7csYfUf
>>340
関係ないでしょw vectorの要素指定に必要な型はsize_typeだからw
344デフォルトの名無しさん
2021/12/11(土) 00:02:57.69ID:3H+eghbz
>>343
ふ〜ん、で?
sizeがunsignedなメリット挙げれるの?挙げれないの?
345デフォルトの名無しさん
2021/12/11(土) 00:09:02.31ID:VVJ2blgW
>>344
同じ人かなw 最初から最後まで関係ないとしか言ってないよw 関係ない話をする意味はないw
346デフォルトの名無しさん
2021/12/11(土) 00:11:05.65ID:3H+eghbz
はい逃げたねお疲れさまー
てかまあこんな頭の固いジジイ追い詰めなくても
>>319-320あたりで結論出てるからもういいんだけどね
sizeも漏れなく頭の固いクソジジイが設計ミスしたんだろうなぁ
間違いを認められるだけコイツよりまだマシだけど
347デフォルトの名無しさん
2021/12/11(土) 00:13:11.51ID:3H+eghbz
わいも寝るんで逃げさせてもらうわ、ほな
348デフォルトの名無しさん
2021/12/11(土) 00:13:27.97ID:VVJ2blgW
>>346
煽るだけで根拠も出せてない無関係な話をしてるのはそっちでしょw 話が終わらなくなるなら普通はしないw
頭が硬いのは君だよw
349デフォルトの名無しさん
2021/12/11(土) 02:16:25.58ID:heMahnZy
>>341
もう見てないだろうけど、>>331のケースだと
わざわざstd::move()で右辺値にキャストしなくても
vHoge.push_back(hoge());
で良いと思う。
hoge hoge001;とするから左辺値になってしまってstd::move()が必要になるけど、
引数で直接hoge()とすれば右辺値だからstd::move()しなくても右辺値参照のpush_backが呼ばれるはず。
350デフォルトの名無しさん
2021/12/11(土) 03:09:07.14ID:fJKHaMXl
emplace_backっていつ使うんだっけ?
351デフォルトの名無しさん
2021/12/11(土) 03:48:00.02ID:heMahnZy
>>350
今でしょ・・・
>>349なんてしなくても
vHoge.emplace_back();
で良い話だった。
352デフォルトの名無しさん
2021/12/11(土) 08:31:56.16ID:iPxJ8RPT
>>349
ありがとうございます!
エンプレイスバックでも確認できました。

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

皆様ありがとうございます
353デフォルトの名無しさん
2021/12/11(土) 08:39:15.08ID:RT/36Bm9
gccのヘッダファイル見るとpush_backがemplace_backに置き換えられてた
354デフォルトの名無しさん
2021/12/11(土) 11:16:33.01ID:VVJ2blgW
質問する方はそもそも何を知りたいのか、どうしたいのかを明確にせず
回答する方はよく分からずに回答してる感じだな(はちみつ餃子以外)
355デフォルトの名無しさん
2021/12/11(土) 11:28:49.13ID:XUdPn4EW
本人じゃないとありえんようなクソレス
356デフォルトの名無しさん
2021/12/11(土) 11:33:31.35ID:VVJ2blgW
俺ははちみつ餃子じゃないよ
分かってる人は全員そう思うと思う
このスレやばい
357デフォルトの名無しさん
2021/12/11(土) 11:40:28.86ID:2RxEeijy
>>354
おまえさんの対話力が、ここの平均以下ってことだな
僅かなエスパーもできないアスペっぽいやつが
取り残されるのは仕方のないことだ
358デフォルトの名無しさん
2021/12/11(土) 11:41:55.96ID:2RxEeijy
ここをサポセンか何かと勘違いしてね?
359デフォルトの名無しさん
2021/12/11(土) 11:43:35.03ID:2RxEeijy
上司や客に言われたことを自分も誰かに言いたいのかな
360デフォルトの名無しさん
2021/12/11(土) 11:53:10.78ID:VVJ2blgW
>>357-359
3連投しないで1つにまとめてね

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

現在このスレのレベルはかなり落ちている
361デフォルトの名無しさん
2021/12/11(土) 12:03:14.48ID:2RxEeijy
>>360
あんたに連投がどうのと指図される筋合いはないし
質問者がどうして欲しい
回答者がどうして欲しい
と、やたら依頼心の強いやつだな

頼み事をする態度を知らんのか
362デフォルトの名無しさん
2021/12/11(土) 12:04:22.50ID:8GY5wY3L
僕だけは特別!
363デフォルトの名無しさん
2021/12/11(土) 12:08:44.64ID:VVJ2blgW
>>361-362
見るに堪えないだけだよ。当たり前のことを要求してるだけだし、ID変えてまで一体何が気に障るのやら・・・
364デフォルトの名無しさん
2021/12/11(土) 12:14:57.20ID:fJKHaMXl
簡単なコードが提示できないんだけどコンセプトで以下のようなエラーがでる

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

アトミック制約ってなに?
365デフォルトの名無しさん
2021/12/11(土) 12:19:25.86ID:1jb/pqqq
1つの内容を理由もなく複数のレスに分けて投稿する奴はもれなくバカなのでスルー推奨
366デフォルトの名無しさん
2021/12/11(土) 12:23:49.93ID:VVJ2blgW
>>364
C++20はまだやる気ないので知らないけど、仕様は以下みたい。参考まで。
https://timsong-cpp.github.io/cppwp/n4861/temp.constr.constr#temp.constr.atomic
367デフォルトの名無しさん
2021/12/11(土) 13:18:37.47ID:iDGs+tOs
多分atomic は、OS に割り込まれない、interrupt disable みたいな奴だろ。
割り込み禁止区間

1. 割り込み禁止
2. atomic に処理したいもの
3. 割り込み許可
368デフォルトの名無しさん
2021/12/11(土) 13:41:40.82ID:MUPeoDuy
>>367
それはリアルモードOSでの話
最近の OS ではユーザーが OS の企みを阻止することは不可能
369デフォルトの名無しさん
2021/12/11(土) 13:49:58.55ID:VVJ2blgW
無関係でスレ違いかつ「内容まで間違った」ことを垂れ流し続けるのはやめてくれ
370デフォルトの名無しさん
2021/12/11(土) 15:00:10.16ID:U6KjSVaU
一般にアトミックと割り込み禁止は異なる概念、
マルチコアのアーキテクチャーなら割り込みを禁止したからといって
複数回のバスサイクルをアトミックに遂行できるとは限らない

つなみに割り込み禁止という手段でOSに割り込まれないことは実現はできるが
強力すぎるので普通はそれはしない
やったらリアルタイムOSならリアルタイム性の前提が根底から覆るし、
非リアルタイムOSでも割り込み禁止したタスクAとは本来無関係(独立に実行して良い)なタスクまで
プリエンプション停止によって止まってしまう弊害があるから
371デフォルトの名無しさん
2021/12/11(土) 15:12:24.61ID:U6KjSVaU
リードモディファイライトぐらいなら今日日のCPUが命令を備えているのでOSにも対応するAPIがあり、
それを実行したらリード、ライト、リードの3バスサイクルがアトミックに実行される
もっと凝った処理をアトミックにしたい場合は

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

となり、1と3はやはりOSにお世話いただく
372デフォルトの名無しさん
2021/12/11(土) 15:16:22.95ID:xxQzv6uY
>>363
出た、当たり前のことを要求だとよ
自分の要求は通って当たり前と思っている真性のやつw
373デフォルトの名無しさん
2021/12/11(土) 15:18:53.32ID:MUPeoDuy
>>371
クリティカルセクションとイベントを使って書いていたことがありましたが、スタベーションに悩まされて止めてしまいました…
374デフォルトの名無しさん
2021/12/11(土) 15:26:46.48ID:U6KjSVaU
>>373
なんでatomicに処理するごときでイベントが出てくるのかわからん……
1で待っているタスクBが居るなら、アトミックな処理を終えたタスクAが3を実行した時点で
OSがタスクBに自動的に通知する(ていうか起こす
不必要に凝りまくった(そして間違った)排他制御をしているのではないか、
375デフォルトの名無しさん
2021/12/11(土) 16:00:21.52ID:9bOVK1ul
セマフォでも大丈夫なん?
376デフォルトの名無しさん
2021/12/11(土) 16:48:16.25ID:VVJ2blgW
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
377デフォルトの名無しさん
2021/12/11(土) 17:02:39.01ID:y3N81+jA
>>376
迷惑なんでコテハンにしていただけません?
378デフォルトの名無しさん
2021/12/11(土) 17:06:37.77ID:VVJ2blgW
何が迷惑なのか理由の説明がないが、コテハン付けたいならお前だけ勝手につけとけw
379デフォルトの名無しさん
2021/12/11(土) 17:13:56.24ID:VjmhXzGH
template <typename T, typename Allocator = std::allocator<T>>
using vec = std::vector<T, Allocator>;

auto v = vec(0, 0);

ってgccだと動いてclangだとコンパイル通らないけどclangのバグ?
380デフォルトの名無しさん
2021/12/11(土) 17:17:46.16ID:9bOVK1ul
勘違いしてた
セマフォでも一人に限定すれば問題ないか
381デフォルトの名無しさん
2021/12/11(土) 17:36:33.78ID:gcR9gZtv
そもそもそもそも

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

単にconstexprじゃないbool値をrequiresしてませんか?
382はちみつ餃子 ◆8X2XSCHEME
2021/12/11(土) 17:38:45.13ID:kyD4TLbr
>>379
バグというか C++20 対応が不十分なんだと思う。

@ 元々は実引数から型引数にあてはまる型を推論するのは関数テンプレート (メンバ関数テンプレートを含む) でしか出来なかった
A C++17 コンストラクタの実引数からクラスの型引数を推論できるようになった
B C++20 からエイリアステンプレートを挟んでも推論できるようになった ← これがまだ出来ない
383デフォルトの名無しさん
2021/12/11(土) 18:22:11.20ID:fJKHaMXl
>>381
たしかにこれの最初のサンプルのdraw関数みたいな事をrequiresしてる。
https://cpprefjp.github.io/lang/cpp20/concepts.html
ただ上で言うdraw関数はconstexprなんだけどな・・・
384デフォルトの名無しさん
2021/12/11(土) 20:57:07.56ID:VjmhXzGH
>>382
わかりやすかったありがとう
まだmake_hogeみたいな不格好なヘルパ関数が役に立つこともあるのね
385デフォルトの名無しさん
2021/12/12(日) 02:33:53.10ID:ECuL7aut
NFTアートとNFTゲームとGameFiとブロックチェーンゲームに
提供する側・作る側として参入しよう。
(むりなら参加する側でもいい)
DAOとPlay-to-Earn(遊んで稼ぐ)が世界の未来になる
386デフォルトの名無しさん
2021/12/12(日) 09:13:16.08ID:2ZUu/eca
C#で作成されたDLLってC++で呼び出せないんでしたっけ?
387デフォルトの名無しさん
2021/12/12(日) 10:05:57.23ID:Rei0r571
>>386
やってみれば?何をしてみたの?
388デフォルトの名無しさん
2021/12/12(日) 12:59:03.03ID:kKgLRxlD
>>386
c++cliのラッパdllを挟んでc#dllを呼ぶとかc#dllをcom参照可能にするとか.NET DLLExportを使うとかあるよ
389デフォルトの名無しさん
2021/12/12(日) 13:04:02.42ID:Rei0r571
>>388
そういうのはできるかどうかを含め、どういう環境で何を対象に何をしたいのかによる。
そんなことすら書いてない人にいきなりキーワードをあげる必要はないよ。
390デフォルトの名無しさん
2021/12/12(日) 13:10:20.08ID:tD0M3iYv
べつにキーワードくらいいいじゃん
391デフォルトの名無しさん
2021/12/12(日) 13:17:19.51ID:Rei0r571
技術に関しては不正確な情報を垂れ流すことほどの害悪はない
392デフォルトの名無しさん
2021/12/12(日) 14:51:29.97ID:4sEaLykb
めんどくさい奴だなw
393デフォルトの名無しさん
2021/12/12(日) 14:55:11.15ID:0XY4m15b
悪意を持って嘘をつくのはいかんが
信じていたことが後に間違っていたことに気付くことはあり
それへの虞を言い訳に何もしないやつと
自らの誤りに気付いたときに潔くないやつは生ゴミだ
394デフォルトの名無しさん
2021/12/12(日) 15:18:45.20ID:MG1pihlR
そもそも>>391の言う不正確な情報ってなんだ?
395デフォルトの名無しさん
2021/12/12(日) 16:31:47.95ID:4sEaLykb
>>394
Linux環境ではC#のCOM相互運用できないとか、かなあ?
396デフォルトの名無しさん
2021/12/12(日) 16:41:36.70ID:2ZUu/eca
>>387
君は役に立たんなw

>>388
ありがとう
やっぱそういう方法になるんだね
397デフォルトの名無しさん
2021/12/12(日) 16:45:20.02ID:Rei0r571
>>394
今回の話で言えば条件によっては動かないのにさも動くかのようにミスリードする情報
相手の勘違いを指摘する機会がないことにより、結果的に回答にならない情報
398デフォルトの名無しさん
2021/12/12(日) 17:00:15.53ID:ooYWiIrJ
>>395,397
ありとあらゆる環境で動く回答しか認めないとかアスペ全開やなw
399デフォルトの名無しさん
2021/12/12(日) 17:05:43.60ID:Rei0r571
>>398
普通ですよ。環境はおろか困っている状況すら何も書いてないのだから。普通に釣りの気配しかありません。
400デフォルトの名無しさん
2021/12/12(日) 17:16:30.63ID:Rei0r571
あと加えて言うならば、一般に・・・という話なのですが、
runtimeでVMを動かすような言語の場合、あまりnative側からキックするような使い方をしません
組み込みなど、そうせざるを得ない特殊な状況のときくらいですね
401デフォルトの名無しさん
2021/12/12(日) 17:18:23.27ID:tD0M3iYv
んで根掘り葉掘り聞くだけ聞いて結局回答しないパターン、ってのはよく見るな。
402デフォルトの名無しさん
2021/12/12(日) 17:26:07.41ID:Rei0r571
>>401
それは分かりもしないのに回答しようとしたケースですね
全条件想定しないで回答しようとするとそうなります
403デフォルトの名無しさん
2021/12/12(日) 17:29:25.52ID:Rei0r571
もちろん聞いたことに答えがない場合も回答する機会は来ませんけどw
404デフォルトの名無しさん
2021/12/12(日) 21:03:58.85ID:A2l5mzZ3
浮動小数点の0.0以外の真偽値って規定されてるんですか?
2.0 == trueが偽になるのにif(2.0)は真のように振舞うのでよく分からなくなりました
405デフォルトの名無しさん
2021/12/12(日) 21:11:05.34ID:LDYHaH+j
それはtrueが1に変換されて比較してるのでは
406デフォルトの名無しさん
2021/12/12(日) 21:13:32.32ID:2ZUu/eca
0は偽でそれ以外は真
if(5) も if(10) も 0 以外だから真
5も10も真だが 5 == 10 は当然等しくないため偽になる
407デフォルトの名無しさん
2021/12/12(日) 21:34:12.15ID:Rei0r571
>>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
408デフォルトの名無しさん
2021/12/12(日) 21:36:42.12ID:Rei0r571
if (2.0 != 0)はあんまり正確じゃないけどねw
409デフォルトの名無しさん
2021/12/12(日) 21:40:50.69ID:f1HMG1tw
当然ながらbool(2.0) == trueとすれば真になるよ
410デフォルトの名無しさん
2021/12/13(月) 21:50:35.10ID:GurY6adw
bool(2.0) == true
2.0 == double(true)
で曖昧にならない
こういうのoperatorとctorでは作れないもんかね
411デフォルトの名無しさん
2021/12/13(月) 21:58:10.81ID:anT0EydK
>2.0 == double(true)

え?
412デフォルトの名無しさん
2021/12/13(月) 22:07:54.75ID:XiOitZFG
最近本当に質問者も回答者も酷いな・・・日本語からやばい
>>410
何が曖昧だと言っていて、こういうのってどういうのなんでしょ?
>>411
え?じゃ何も伝わらない
413デフォルトの名無しさん
2021/12/13(月) 22:47:49.66ID:rx7XzRPV
そういうのを求めるなら上級者の相談室でも作ってそこにいればいいじゃない
人のやり取り見て文句いうだけの人なんて居ても邪魔なだけだし
414デフォルトの名無しさん
2021/12/13(月) 22:54:20.23ID:XiOitZFG
そんな難しい要求してないんだけどw
一応↓なスレッドもありますよ

0からの、超初心者C++相談室
http://2chb.net/r/tech/1542002113/
415デフォルトの名無しさん
2021/12/13(月) 23:35:59.51ID:GurY6adw
何も言ってないやつとじゃ話にならん
マウント取ったつもりになってろよアホ
416デフォルトの名無しさん
2021/12/14(火) 01:10:13.82ID:4HDQQOQ1
ID:XiOitZFG
またコイツ自分賢いと思ってる例のガイジか
417デフォルトの名無しさん
2021/12/14(火) 01:43:40.68ID:vFkeyZ3D
天に唾するクンじゃないよね?
418デフォルトの名無しさん
2021/12/14(火) 04:27:52.83ID:l53ksWPX
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な理由が全然分かりません
419デフォルトの名無しさん
2021/12/14(火) 09:36:15.02ID:jz8gmYNu
arrayは設計悪いね
string_viewみたいなラッパーのほうがマシ
420デフォルトの名無しさん
2021/12/14(火) 13:08:07.96ID:64LuYoGR
arrayはそんなに設計の余地ないし別によくね
ラッパークラスは役割が別だし比較する意味がわからん
421デフォルトの名無しさん
2021/12/14(火) 13:45:14.16ID:NTJkXylC
>>418
こうすればいけるね
波括弧が一つ余計に必要なのがなあ

std::array<std::array<int, 2>, 2> a{{{1, 2}, {3, 4}}};
422デフォルトの名無しさん
2021/12/14(火) 15:27:55.81ID:W58I2MTh
>>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
423デフォルトの名無しさん
2021/12/14(火) 19:16:16.31ID:l53ksWPX
>>421
>>422
ありがとうございます
配列をメンバに持ってるので本来は波括弧が二重に必要になるんですね
今までは1次元でなんとなく配列と同様で動いていたので省略しているという認識がありませんでした
424デフォルトの名無しさん
2021/12/14(火) 20:13:02.90ID:kTLKUa7o
a{{1, 2}, {3, 4}}で初期化できるようにしようぜっていう提案もあったけど
初期化ルールがますますカオスになるので却下された
425デフォルトの名無しさん
2021/12/16(木) 18:55:44.40ID:Q3qUbeDH
テンプレートで関数の引数を書く方法がわからないんですが

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

を自作するにはどうやればいいんでしょうか
426デフォルトの名無しさん
2021/12/16(木) 18:59:42.63ID:oxWy3zzs
まず日本語から勉強してください
「テンプレートで関数の引数を書く方法」と「sort(V.begin(), V.end(), ラムダ式)を自作」には何の関連もありません
427デフォルトの名無しさん
2021/12/16(木) 18:59:43.14ID:oxWy3zzs
まず日本語から勉強してください
「テンプレートで関数の引数を書く方法」と「sort(V.begin(), V.end(), ラムダ式)を自作」には何の関連もありません
428デフォルトの名無しさん
2021/12/16(木) 19:10:09.52ID:Q3qUbeDH
自己解決しました
リンク先みながらこれで出来ました



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
429デフォルトの名無しさん
2021/12/16(木) 19:16:51.92ID:oxWy3zzs
質問と回答はおろか日本語も覚束ない人の記事の宣伝はどうかと思いますよ
430デフォルトの名無しさん
2021/12/16(木) 19:28:45.53ID:/OSP+i6s
ごめん例のアスペじゃないけど俺もこの質問は日本語がひどいと思う

「テンプレートを使って、関数を引数とする関数を書く方法がわからない」でいいんだよね?
「で」も「の」も意味が複数ある助詞だから次から気を付けような
431デフォルトの名無しさん
2021/12/16(木) 22:08:17.98ID:oxWy3zzs
自演乙
432デフォルトの名無しさん
2021/12/19(日) 22:39:42.44ID:G+T88tW/
VC++の質問になってしまうかもしれませんがよろしくお願い致します。

void Func() throw (const char*);とした関数で静的に例外の型チェックをしてコンパイルエラーなり吐いてもらうことはできないのでしょうか?
try { Func(); } catch (const wchar_t* ex) {}と書いてしまった場合等にコンパイルエラーを出してもらいたいです
433デフォルトの名無しさん
2021/12/19(日) 23:32:36.81ID:JPMZsaO2
>>432
合法なものにエラーとかねえわ
434デフォルトの名無しさん
2021/12/19(日) 23:52:05.34ID:FKQX+MA6
例外指定はもうすぐ消えてなくなる機能だから使うのやめた方がいいよ
435デフォルトの名無しさん
2021/12/20(月) 00:05:45.43ID:5GaBUmyD
例外指定は調べたらC++17で削除されてんだな。
例外指定は実行時のチェックで意味ないと思ってたから一度も使ったことない。
436デフォルトの名無しさん
2021/12/20(月) 02:04:19.31ID:yobIy+EO
throwで投げる例外を指定するのはC++11以降非推奨でC++17で削除された
例外を投げ得ることを示す(空の)throwもC++11以降非推奨でC++20で削除

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

結論としては無理
437デフォルトの名無しさん
2021/12/20(月) 02:10:12.31ID:WdsmvZWK
意味わからんもんなthrow接尾子
投げる例外全部把握出来んのかよって
438デフォルトの名無しさん
2021/12/20(月) 07:30:27.08ID:zT9OLvmm
ファイルオープンの失敗をどうやって間違えずに処理させるんだよ
439デフォルトの名無しさん
2021/12/20(月) 07:31:31.20ID:zT9OLvmm
20年ちかくそれがいいことだっつってやってたんだぞ
440デフォルトの名無しさん
2021/12/20(月) 07:47:02.08ID:raeshKom
void aho() throw(std::bad_exception);
441デフォルトの名無しさん
2021/12/20(月) 09:50:56.71ID:TszysAyf
ポインタ型変数のスタック消費が4バイト(32bit OS)または8バイト(64bit OS)なのはわかるんだけど、
参照型変数ってスタックを何バイト消費するの?
442はちみつ餃子 ◆8X2XSCHEME
2021/12/20(月) 11:34:47.56ID:GbIoN43K
>>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) と同じ意味になるってことね。
443デフォルトの名無しさん
2021/12/20(月) 11:49:32.57ID:LVF1I4ij
確認してみた。
$ 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)
444デフォルトの名無しさん
2021/12/20(月) 12:07:37.09ID:IpG9nRdD
参照先が見えてるところでは
参照先へ直にアクセスしてコストゼロだったり
参照引数をとる関数でもインライン化された場合はゼロ
てなことがなければポインタ1個分
445デフォルトの名無しさん
2021/12/20(月) 12:13:52.79ID:LVF1I4ij
そういうのは最適化なので無関係
$ 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
446デフォルトの名無しさん
2021/12/20(月) 21:41:58.49ID:c8hM8/Kk
最適化する前の意味合いとして
ポインタ1個分のコストを必ず発生するという規定なんかあったか?
447デフォルトの名無しさん
2021/12/20(月) 21:44:15.52ID:LVF1I4ij
誰もそんな話はしてないので、お前が調べて貼れ
448デフォルトの名無しさん
2021/12/20(月) 22:11:35.36ID:c8hM8/Kk
444へのレスで最適化がどうたらぬかしといて
そんな話はしてない、かよ
アセンブラ貼ってた威勢はどこへ吹っ飛んだんだかw
いいよ、逃げたきゃ逃がしてやるよヘタレ野郎
449デフォルトの名無しさん
2021/12/20(月) 22:16:05.29ID:LVF1I4ij
最初から処理系(gcc)の話しかしてない。規定の話をしてるのはお前だけだ。早く貼れ。逃げるな。
450デフォルトの名無しさん
2021/12/20(月) 23:16:36.18ID:TszysAyf
unique_ptrオブジェクトとその実体を参照する参照型を使えば、
スタック消費を抑えつつスタック変数を使っているかのようなソースコードが書けそうだけど
451デフォルトの名無しさん
2021/12/21(火) 00:06:02.44ID:Ug1txKhz
それは全くレイヤーの違う話
アプリのコンテキストを構造体/クラスにしてヒープかスタティックに置くだけで実現できる
実現手段としてunique_ptrを使いたいなら使えばいいというだけ
452デフォルトの名無しさん
2021/12/21(火) 00:10:51.14ID:QziEyx5H
>>451
ひょっとして ID:c8hM8/Kk かな?
無意味な煽り書き込みやめてくれ
453デフォルトの名無しさん
2021/12/21(火) 00:20:05.56ID:Ug1txKhz
煽りではないんだが、俺はID:LVF1I4ij
454デフォルトの名無しさん
2021/12/21(火) 00:33:36.24ID:QziEyx5H
>>453
レイヤーが違うとか、勝手に仕切るな
455デフォルトの名無しさん
2021/12/21(火) 00:42:51.31ID:QziEyx5H
構造体/クラスをヒープに置いたところで、その構造体/クラスのメンバー関数でスタック変数を使ってたら意味がないだろ
何が問題提起されているのか理解してから書き込んでくれ
456デフォルトの名無しさん
2021/12/21(火) 01:02:00.74ID:Ug1txKhz
スタック消費を抑えたいなら静的に確保するかヒープを使えばいいというだけの話でしょ。
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を使いたいなら使えばいいというだけ。
伝わらないようなので少し細かく書いた。伝わるんだろうか・・・。
457デフォルトの名無しさん
2021/12/21(火) 01:16:14.39ID:QziEyx5H
>>456
君は回答者に向いてない
458デフォルトの名無しさん
2021/12/21(火) 01:18:02.55ID:QziEyx5H
アムロの父親みたいな変な書き込み、リアルに遭遇するとやはり引く
459デフォルトの名無しさん
2021/12/21(火) 01:18:43.76ID:Ug1txKhz
>>457
質問したいレイヤと解決策のレイヤが合ってないだけw
460デフォルトの名無しさん
2021/12/21(火) 01:27:03.87ID:QziEyx5H
自覚なさそうなところがますますテム・レイ感あるわ
お大事に
461デフォルトの名無しさん
2021/12/21(火) 01:46:16.28ID:Ug1txKhz
質問して複数人に回答してもらってるのに、ただ煽るだけの人に「自覚」とやらを問われてもねw
大好きなガンダムのたとえに勝手に満足して病んでてくれ
君にプログラミングは向いてない
462デフォルトの名無しさん
2021/12/21(火) 01:50:07.69ID:QziEyx5H
今時特別な理由もなくnew演算子を使うC++プログラマは間違いなく無能だよ
463デフォルトの名無しさん
2021/12/21(火) 01:53:35.52ID:Ug1txKhz
理由はC++標準ライブラリを使用しない言語/処理系レベルの話をしていたから
464デフォルトの名無しさん
2021/12/21(火) 02:05:33.42ID:QziEyx5H
ガンダムの記憶回路にとりつけるやつ好きなだけ作ってていいぞ
465デフォルトの名無しさん
2021/12/21(火) 02:17:40.01ID:Ug1txKhz
妄想の中でもニュータイプじゃない君にプログラミングは無理w
ガンダムに辿り着けずコロニー内で果てる
466デフォルトの名無しさん
2021/12/21(火) 14:30:10.99ID:bvwR7M/G
テンプレートを引数に取る関数で、
その入力として、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)
を作ってるけど一緒に表記できないかな、みたいな
467はちみつ餃子 ◆8X2XSCHEME
2021/12/21(火) 15:12:48.55ID:f1yxmqA1
>>466
???
その定義で配列も受け取れるけど。
int main(void) {
int x[] = {1, 2, 3};
std::cout << sum(x, 3) << std::endl;
}
468デフォルトの名無しさん
2021/12/21(火) 15:20:59.50ID:Ug1txKhz
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;
}
469デフォルトの名無しさん
2021/12/21(火) 15:35:03.48ID:bvwR7M/G
ありがとうございます
>>467 頭のどこかでポインタにしないと取れないと思っていました

>>468
iteratorは馴染みがないのでそのコードで勉強させていただきます
470デフォルトの名無しさん
2021/12/21(火) 15:39:21.19ID:sStr75A4
>>462
ただのサンプルコードに今時とか無能とか・・
中で何が起きるか把握してない無能を量産しようとしないでくれ
471デフォルトの名無しさん
2021/12/21(火) 15:47:15.24ID:msz2/cZB
本来はrangeの出番なんだがな
導入が遅れたばかりに……
472デフォルトの名無しさん
2021/12/21(火) 16:45:50.91ID:fi3Z01x+
#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;
}
473デフォルトの名無しさん
2021/12/21(火) 16:51:06.96ID:msz2/cZB
std::iterator_traits使おうよ
474デフォルトの名無しさん
2021/12/21(火) 16:56:11.01ID:fi3Z01x+
#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;
}
475デフォルトの名無しさん
2021/12/21(火) 17:32:40.16ID:Ug1txKhz
sumがunkoは独創的だと思うけど、戻り値の型はテンプレート引数でいいかもね
476sage
2021/12/21(火) 18:15:52.03ID:qDHWQ1/Y
↓こんなコード書いてるんですが,もっとエレガントに代入できませんか?
a[0]=*ptr;
a[1]=*(ptr+1);
a[2]=*(ptr+2);
477蟻人間 ◆T6xkBnTXz7B0
2021/12/21(火) 18:28:20.41ID:NT9maPPc
ptr[1]
478デフォルトの名無しさん
2021/12/21(火) 19:09:14.75ID:qDHWQ1/Y
>>477
エレガントな回答ありがとうございます.
解決しました.
479デフォルトの名無しさん
2021/12/21(火) 20:23:30.29ID:iHW7b2cO
std::copy(ptr, ptr + 3, a);
僕はfor文のほうが好きです
480デフォルトの名無しさん
2021/12/21(火) 20:25:38.21ID:UPYLxpzi
C++98以前の化石
481デフォルトの名無しさん
2021/12/21(火) 21:03:47.64ID:msz2/cZB
std::copy_nもあるぞ
482デフォルトの名無しさん
2021/12/22(水) 18:49:46.59ID:ycAkB2VB
>>479
>>481
こんなんもあるんですね.使わせてもらいます.ありがとうございました.
最近c++やり始めたんですが,ポインタが出てくるとギョッとします.
483デフォルトの名無しさん
2021/12/22(水) 19:44:38.16ID:VkqlmauA
何に使いたいのか知らないけど、C++やめてRustの方がいいんじゃないの?
484デフォルトの名無しさん
2021/12/22(水) 20:00:31.77ID:j6Uulo2p
高速grepツールとして有名なripgrepはRustで作られてるからRustは優れた言語なのだろう、ぐらいなことは察せられるが
485デフォルトの名無しさん
2021/12/23(木) 08:08:59.49ID:zbE03cOE
>>483
rustなんてプログラム初級者に勧めるなよ。
あんなの習熟した上級者向けの言語だわ。c++以上に初級者向け解説が無いのは致命的。

あと、Rustはスレ違いだからな。このコメにもレスするなよ。
486デフォルトの名無しさん
2021/12/23(木) 09:13:28.05ID:cFIeneRn
>>485
C++の方が難しいよ
ポインタでギョッとするレベル=Cに抵抗があるなら、わざわざC++を使うよりはRustでいい
5chはコメとは言わない
お前がレスしなければ良かっただけ
487デフォルトの名無しさん
2021/12/23(木) 09:43:11.86ID:TuHGjVDJ
Rust は良いアプローチだがどうしても記述量が多くなるから敬遠してる
488デフォルトの名無しさん
2021/12/23(木) 11:51:22.33ID:Gjq2t2pD
>>486
ポインタは名札のメタファーを使った説明が確立しているけど、所有権、譲渡、借用、ライフタイムの初心者向け説明はクソみたいのしか無いだろ。そんなもん初級者に紹介するなよ。

スレ違いでわざわざ役立たずを紹介するやつは何を考えているんだろうかね?
489デフォルトの名無しさん
2021/12/23(木) 12:29:11.30ID:cFIeneRn
>>488
はいはい、ID変えてご苦労さま
同じことだけど、生アドレス使うの得意でない言語の方が向いてるだろってだけ
C++は少なくともCをまともに使えるようになってから習得すべき
490デフォルトの名無しさん
2021/12/23(木) 12:33:21.82ID:lsirm1I0
.hや.cpp以外からいじられたくない変数に対するインライン関数をパブリックに公開したいのですが、classを利用する以外にこのような事はできないのでしょうか?
staticや無名名前空間を利用するとcppファイルで利用できなくなりますしやはりclassを使えということでしょうか?

extern int value; //これは隠蔽したい
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい
491デフォルトの名無しさん
2021/12/23(木) 12:43:43.47ID:N07J633j
namespace {
extern int value; //これは隠蔽したい
}
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい
492デフォルトの名無しさん
2021/12/23(木) 12:44:08.09ID:IRDqWaPI
>>489
ならc紹介しろよ。
スレ違いのクソを紹介するな。
493デフォルトの名無しさん
2021/12/23(木) 12:44:27.15ID:N07J633j
もとい
namespace {
int value; //これは隠蔽したい
}
inline bool IsZero() { return value == 0; } //これはグローバルに利用してもらいたい
494デフォルトの名無しさん
2021/12/23(木) 12:47:57.55ID:IRDqWaPI
>>493
関数内にstatic変数持てなかったっけ?
495デフォルトの名無しさん
2021/12/23(木) 12:52:37.53ID:IRDqWaPI
>>494
連投失礼。
自身の関数内にあるstatic変数の参照を返す関数を用意するパターン無かったっけ?
496デフォルトの名無しさん
2021/12/23(木) 12:58:20.57ID:cFIeneRn
>>492
ポインタに抵抗ある人にCを勧めるくらいならC++に近くて安全なRustを勧めるのが筋
見当違いな話をしてるだけだよ君は
497デフォルトの名無しさん
2021/12/23(木) 12:59:07.12ID:6GqfEn2+
valueの立ち位置が気になるが
extern(実行ファイル内で全部共通)するならinline関数のIsZeroが見えた時点でvalueも見えてないといけない
498デフォルトの名無しさん
2021/12/23(木) 13:03:49.15ID:cFIeneRn
class hoge {
static int value;
public:
static bool IsZero() { return value == 0; }
};
inline bool IsZero() { hoge::IsZero(); }
int main() {
return IsZero();
}
499デフォルトの名無しさん
2021/12/23(木) 13:07:02.43ID:lsirm1I0
>>493
ありがとうございます
ヘッダにそれを書いたとしてcppファイルからvalueを扱えるのでしょうか?

>>497
JavaやC#で言うところのprivate static intとして該当ヘッダ内&cppファイル内からは自由に扱え、それ以外からは見えなくさせたいという値です
500デフォルトの名無しさん
2021/12/23(木) 13:20:56.47ID:cFIeneRn
JavaやC#でもそんなところに可視性の定義はない。
501デフォルトの名無しさん
2021/12/23(木) 17:32:16.18ID:SEEFcByD
>>496
相手がなんでc++を使っているのかのニーズすら確認しないで何を独りよがりなことを言っているんだよ。
相手の目的を無視してスレ違いのツールを薦めるのはアホのやること。
Rustの伝道師はこんな低レベルなのかね。
502デフォルトの名無しさん
2021/12/23(木) 17:36:54.99ID:N07J633j
あーうるせえ
C++スレでRust Rust連呼すんな
寒すぎんだよ
503デフォルトの名無しさん
2021/12/23(木) 18:02:45.75ID:cFIeneRn
>>501
別に俺はRustの伝道師ではないが、>>483で一言Rustを勧めたらIDをコロコロ変えながら文句を言ってくる人がいるだけ
ポインタが不得意でRustも使えない質問者ご本人様だと思ってる
504デフォルトの名無しさん
2021/12/23(木) 19:12:55.62ID:AUfS9hAV
>>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;
}
505デフォルトの名無しさん
2021/12/23(木) 19:32:24.95ID:3yOXD4ws
inlineで書きたいらしいので、それだとコンパイル単位で値が変わっちゃうのでは?
506デフォルトの名無しさん
2021/12/23(木) 19:55:38.05ID:CLdJLYY1
>>505
インラインはどのみち無理じゃない?
関数内static変数は共通になる保証があったと思う。どこだか忘れたけど。
507デフォルトの名無しさん
2021/12/23(木) 20:02:52.87ID:cFIeneRn
クラス内に実装を書くなどヘッダにあればどの道インラインだと思う
508デフォルトの名無しさん
2021/12/23(木) 20:05:51.29ID:cFIeneRn
staticは静的に確保されるので、インライン展開されても同じシンボルを参照する
509デフォルトの名無しさん
2021/12/23(木) 20:30:35.89ID:cFIeneRn
ちゃんと書いておくと、>>490にもともとクラスを使わない指定があるので、どうかね?
という意味では前提を満たしてないと思う
クラスを使う最も素朴な例は>>498に書いておいた
510デフォルトの名無しさん
2021/12/23(木) 21:54:27.28ID:4lOSoN0i
メモリ確保用途でvectorやstringつかい
ポインタアクセスすれば、new で確保するのと速度に大差ないとおもうんですが
実測すると10%〜くらいSTLつかうほうが速度低下するみたいなんですが
直メモリアクセスでも落ちるのはなぜなんでしょうか
511デフォルトの名無しさん
2021/12/23(木) 22:14:02.53ID:6YhOrdG1
その計測コード貼ってみ
多分メモリアクセスとは関係ない所で時間食ってる
512デフォルトの名無しさん
2021/12/23(木) 22:16:19.47ID:lsirm1I0
>>509
ありがとうございます
やはりクラスを利用しないと実現無理そうなので、498のようなC#で言うところのstatic class的な形でやることにします
513510
2021/12/23(木) 22:21:06.77ID:4lOSoN0i
これです・・・


https://ideone.com/NKSCRi


vector : 974.971 ms
new char : 921.191 ms
new int32 : 899.579 ms
514デフォルトの名無しさん
2021/12/23(木) 22:38:03.27ID:MjSWMWRR
1秒もかかる?
515510
2021/12/23(木) 22:49:58.53ID:4lOSoN0i
こっちだと大差がついてるんですが
家の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
516510
2021/12/23(木) 22:55:16.12ID:4lOSoN0i
自己解決しました
メモリ確保と解放部分を含めて計測してたのを
コピー部分のみの測定にしたらほぼ一緒になりました


https://paiza.io/projects/ge5iOWrzGu2E2PjogsRlUw

vector : 219.947 ms
new char : 204.565 ms
new int32 : 214.644 ms
517デフォルトの名無しさん
2021/12/23(木) 22:55:24.77ID:6YhOrdG1
ほとんどメルセンヌツイスタの実行時間じゃね
518デフォルトの名無しさん
2021/12/23(木) 22:56:40.08ID:MjSWMWRR
確保にかかってると思う?
一秒はさすがにないと思う。
何かおかしいな。
519デフォルトの名無しさん
2021/12/23(木) 22:58:15.18ID:MjSWMWRR
vector云々以前に、newバージョンも遅すぎると思う。
話にならないくらい。
i8008とかじゃないよね?
520デフォルトの名無しさん
2021/12/23(木) 23:00:56.66ID:6GqfEn2+
C++/CLIでstd::mutex使えないのなんでなん?

頑張ってWin32APIで代用する気力はあるけどわざわざ無効化されてる理由が知りたい
521510
2021/12/23(木) 23:05:52.89ID:4lOSoN0i
メモリ確保・解放と、メルセンヌツイスタを外して計測したら
今度はvectorのほうが圧倒的に早いんですが

https://ideone.com/rKv4qv

vector : 237.55 ms
new int32 : 713.82 ms
522デフォルトの名無しさん
2021/12/23(木) 23:26:56.25ID:4lOSoN0i
計測時間は、ある程度の長さで、オンライン実行環境のタイムアウトにならないように
ループ回数を変更してるので
523デフォルトの名無しさん
2021/12/23(木) 23:54:08.59ID:58w1xOUi
生ポインタにしたら同じ感じにならない?
unique_ptr<int32_t[]> p(new int32_t[2*size]);
int32_t* A = p.get();
mmcpy(A, size);
524デフォルトの名無しさん
2021/12/24(金) 01:54:49.07ID:T9e6TA98
手動でループ回数変更とか馬鹿らしいからquick-bench.comとか使うのオススメ
525デフォルトの名無しさん
2021/12/24(金) 09:00:08.27ID:opQHMY4K
overrunがある
std::make_uniqueを使え
526デフォルトの名無しさん
2021/12/24(金) 09:04:03.38ID:opQHMY4K
https://ideone.com/JupGoY
527デフォルトの名無しさん
2021/12/24(金) 09:05:00.82ID:6d0f054m
サンプルコードだからと安易にnew演算子使う風潮やめたほうがいい
コールバックや別スレッドに渡すインスタンスの生成にのみnew演算子を使うべき
528デフォルトの名無しさん
2021/12/24(金) 09:08:39.52ID:opQHMY4K
そういうことではなくunique_ptrを理解してから使えというだけ
529デフォルトの名無しさん
2021/12/24(金) 09:09:02.65ID:6d0f054m
バッドノウハウがいつまでたってもなくならない原因は入門者向けのサンプルコード
530デフォルトの名無しさん
2021/12/24(金) 09:09:36.51ID:opQHMY4K
そもそもサンプルコードの質が悪すぎる
531デフォルトの名無しさん
2021/12/24(金) 09:10:57.45ID:opQHMY4K
今回のね(>>526)
532デフォルトの名無しさん
2021/12/24(金) 09:11:48.94ID:6d0f054m
>>528
むしろ「理解してなくても使え」だよ
ナマポだってそうだ
サティアンとか金目とかじゃなくてな
実際に使って痛い目にあわないと
533デフォルトの名無しさん
2021/12/24(金) 09:12:11.50ID:opQHMY4K
>>462は壮大な勘違い
534デフォルトの名無しさん
2021/12/24(金) 09:13:48.09ID:opQHMY4K
>>532
何でもそうだが、理解しないで使うからこういう問題が跡を絶たない
「理解してなくても使え」が何よりも悪い
535デフォルトの名無しさん
2021/12/24(金) 09:21:12.05ID:6d0f054m
>>534
それは違う
使わなければ理解できないよ
自身が初心者だった頃を思い出せないくらい耄碌したの?
お大事に
536デフォルトの名無しさん
2021/12/24(金) 09:22:45.08ID:opQHMY4K
>>535
俺は初心者の頃から理解できていないものを何となく使うとかはしていない
それが何よりも悪いことを教わってきてるから
537デフォルトの名無しさん
2021/12/24(金) 09:25:48.61ID:ZnDQBfvC
練習と本番を一緒くたにしてるな
まさに現場の癌だったと自白してるようなものだ
538デフォルトの名無しさん
2021/12/24(金) 09:28:20.47ID:opQHMY4K
まさにお前がな
539デフォルトの名無しさん
2021/12/24(金) 09:30:24.34ID:opQHMY4K
コロコロID変わる質問者兼劣悪回答者の荒らしで、そもそも勤務経験なさそう、と思ってるよ
540デフォルトの名無しさん
2021/12/24(金) 09:31:16.13ID:6d0f054m
>>536
現役離れてずいぶん経つの?
実務やってれば仕様書の文章があいまいで実際に動かさないと理解できないってことがいくらでもあるでしょ
「仕様書はない、ソースのみ(キリッ」という状況なんて普通なはずだが
541デフォルトの名無しさん
2021/12/24(金) 09:32:13.38ID:6d0f054m
教わるとか受け身かよ、アホかと
学ぶんだろ
542デフォルトの名無しさん
2021/12/24(金) 09:35:00.51ID:6d0f054m
上司が「お前は触るな」と言いたいのをオブラートに包んで「理解してから触れ」と言われたクチだろう
できないPGだった証拠
543デフォルトの名無しさん
2021/12/24(金) 09:36:56.46ID:6d0f054m
「理解してから使え」なんて、危なっかしい無能な人を開発現場から穏便に排除する時に使う言葉だよ
544デフォルトの名無しさん
2021/12/24(金) 09:42:48.15ID:6d0f054m
肩叩きされていたことに気づけないくらいに読解力が低い
545デフォルトの名無しさん
2021/12/24(金) 09:48:44.26ID:ZnDQBfvC
「理解してから使え」
「はい、理解してきます」
「理解しました!今度こそ大丈夫です」←わかった気になってるが自分が何を分かっていないのかがわからない
546デフォルトの名無しさん
2021/12/24(金) 09:54:19.02ID:6d0f054m
普通は他人に迷惑かけることなく作業しろ、って言えば良いいんだけど、
察するに上司はそれまでの積み重ねで追放する気満々だったんじゃないかな
547デフォルトの名無しさん
2021/12/24(金) 10:05:26.45ID:6d0f054m
unique_ptrやshared_ptrは初心者でもコンパイラのエラーや警告に従うだけで安全にコードを書けるようになるからおススメだと思うよ
もちろん頓珍漢な警告メッセージを出力する不親切なコンパイラだとそうはいかないが
548デフォルトの名無しさん
2021/12/24(金) 12:58:00.18ID:a16a8gMY
下らない煽りを何回にも分けて書くな無能
549デフォルトの名無しさん
2021/12/25(土) 15:17:39.58ID:miWR5HNI
コールバックや別スレッドに渡すインスタンスの生成であっても
new演算子を使わねばならない必然性は無いので

ていうかnewしたブツを渡した先でdeteteさせる設計のは
newしたコードとdeleteするコードが同じCRTでないと危険なので
異なるプロジェクトの間でやるのは一般にアンチパターンなので
 1. そもそも渡さない(利用するスレッドに生成させる
 2. (どうしても渡したい場合は)コピーして渡す
 3. オブジェクトの所有権を渡す側のスレッドが握って生存期間が利用期間を包含することを保証する
のどれかなので
550デフォルトの名無しさん
2021/12/25(土) 15:18:01.17ID:miWR5HNI
少なくともウィンドーズのDLLはDllMain()を有する1本のプログラム同然なので
Ver.0.1のCRTをスタティックリンクしたDLLというものが作れてしまうので
Ver.0.2のCRTとリンクされるコードで生成したオブジェクトのポインタを渡せてしまうので
551デフォルトの名無しさん
2021/12/25(土) 15:49:34.78ID:/YMztZoD
のでので言ってるだけで結論がない
頭悪そう
552デフォルトの名無しさん
2021/12/25(土) 21:39:56.11ID:0AIK3bm0
ActiveX系使ったことないんだろうなって容易に推測でける
553デフォルトの名無しさん
2021/12/25(土) 23:47:20.34ID:miWR5HNI
しらそん
COMオブジェクトの中で異なるバージョンのCRTの混在が起きたら
同じことなんじゃないの
554デフォルトの名無しさん
2021/12/26(日) 01:42:46.74ID:Fmrpdwj0
アウトプロセス
555デフォルトの名無しさん
2021/12/26(日) 02:08:50.44ID:rFpP4pcL
しらそん
アウトプロセスサーバが生成する
COMオブジェクトの中で異なるバージョンのCRTの混在が起きたら
同じことなんじゃないの
なので
556デフォルトの名無しさん
2021/12/26(日) 02:10:54.75ID:P9feSsDc
自演って見苦しいな
557デフォルトの名無しさん
2021/12/26(日) 05:25:00.76ID:0FjCQ3kx
>>549
そういうのをスマポでやれって話?
ヘッダで提供されるライブラリだからスマポもダメだと思うんだけど
558デフォルトの名無しさん
2021/12/26(日) 05:43:12.94ID:a8PAglQ+
>>552
急にCOM持ち出すのはおかしいだろ

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

sin関数に入れる値の目安は100万くらいです
560デフォルトの名無しさん
2021/12/26(日) 09:18:24.17ID:6eMF2SNy
100万をsin()しても、sin()は2π周期
doubleの精度15桁中の5桁以上を無駄にしている

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

boost::multiprecisionとか?
561デフォルトの名無しさん
2021/12/26(日) 09:35:40.45ID:/woV9P1D
出来るなら入れる数を作る時点で[0,2pi)に収まるように工夫する
それが無理なら多倍長浮動小数点数のライブラリ使うか自作するか
562デフォルトの名無しさん
2021/12/26(日) 10:28:27.14ID:a8PAglQ+
>>559
sinの引数に入れる値を浮動小数点数で少しずつ足しこむような処理をしているなら、やめて別の方法を考えろ
563デフォルトの名無しさん
2021/12/26(日) 11:32:37.05ID:SV9DgXqP
sinに時間を入れるのは次元がおかしい

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


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


>>562
こういう話ならわかる
564デフォルトの名無しさん
2021/12/26(日) 12:03:23.64ID:/woV9P1D
sinのテイラー展開にxの大きな累乗が現れるからだよ
100万をバンバン累乗した級数で値域[-1,1]の関数計算してたら誤差まみれになるのは直感的に分かるだろ
565デフォルトの名無しさん
2021/12/26(日) 12:47:17.91ID:6eMF2SNy
>>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

わかった?
桁数同じだから、でかい数は細かい所が消えるのよ
566デフォルトの名無しさん
2021/12/26(日) 15:05:31.07ID:N3NYq5+A
わかんない。
567デフォルトの名無しさん
2021/12/26(日) 15:55:33.50ID:SV9DgXqP
>>565
現象としては確認できたが、理屈が分からない
>>564の言ってるようにテイラー展開の各項が激しくキャンセルし合って桁落ちするってこと?
568デフォルトの名無しさん
2021/12/26(日) 16:03:55.94ID:6s7ujcJo
>>564
のテイラー展開は疑問なんだけど
関数が[0,pi/2.)への押し込みもやってくれるんじゃないの
569デフォルトの名無しさん
2021/12/26(日) 17:28:50.32ID:6eMF2SNy
「桁数同じだから、でかい数は細かい所が消える」が理屈のつもりなんだけど…
sin(6.2831853) = -7.179586477E-9 だし、
sin(1000000.3575641670857) = -3.5E-14 だよ
570デフォルトの名無しさん
2021/12/26(日) 17:52:52.66ID:6eMF2SNy
sin()の結果に13桁の精度が欲しいなら、入力値に小数点以下13桁の精度が要るのよ
sin()は2piの周期関数だから
1000000の所に7桁も使っちゃうのはもったいないのよ
571デフォルトの名無しさん
2021/12/26(日) 19:17:02.92ID:P9feSsDc
まだ小学校の算数で分かる誤差の話してんの?
>>560で話終わらん奴は小学校からやり直せよ
572デフォルトの名無しさん
2021/12/26(日) 19:41:54.46ID:qnixUQRF
桁に関する誤差とかどこの世界の小学校で習うんだよ
573デフォルトの名無しさん
2021/12/26(日) 22:29:03.39ID:Ep2AbKxF
お前は小学校の国語からやり直せw

>> まだ「小学校の算数で分かる」誤差の話してんの?
誰も小学校で習うなんて言ってないぞ
574デフォルトの名無しさん
2021/12/26(日) 22:43:40.78ID:RjefXsAR
log1pの存在理由も似たような話だね
575デフォルトの名無しさん
2021/12/26(日) 23:16:02.57ID:P9feSsDc
俺小学4年生で級数展開したπの計算してたけど・・・
6年生でアセンブラと実数使ってたけど・・・
576デフォルトの名無しさん
2021/12/27(月) 08:46:39.54ID:B/I2o19O
教える奴もよく分かってないからめちゃくちゃになってる

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

0 がややこしい理由は、仮数部が何であっても良いから
例えば 1e-20 は仮数部には1桁目からゴミが入っているが、倍精度ではゼロと見なす
577デフォルトの名無しさん
2021/12/27(月) 10:35:52.12ID:wn+BpFxZ
>>576
お前は>>560様の爪の垢を煎じて飲んでから、小学校をやり直せ
578デフォルトの名無しさん
2021/12/27(月) 18:35:09.36ID:osgcVgi4
uniform_real_distribution の範囲を可変にしたいときってどうしたら良いでしょうか
0 から 1 までの実数を生成するようにしてそれを変数変換するべきですか
579デフォルトの名無しさん
2021/12/27(月) 19:02:31.64ID:DQqD3vMw
っparam
580デフォルトの名無しさん
2021/12/27(月) 20:26:27.31ID:7ufKNB24
>>576
1になるケースでほぼ1になるのは、そこでの微分が0だからだよ
入力値がちょっとずれても結果への影響が小さいのよ
581デフォルトの名無しさん
2021/12/27(月) 20:45:16.64ID:7ufKNB24
「x も上から15桁全部有効な桁」だからこそ、
1000000の所に7桁も使っちゃうのはもったいないのよ

sin(x)=0の所は微分が1または-1、入力のずれがそのまま出力に出る所
582デフォルトの名無しさん
2021/12/28(火) 01:04:16.62ID:OVEU2JJm
厳密な2πnと、doubleで表した有効桁数15桁の大体2πnに近い数字の差を計算すると、nが大きくなるほど差がデカくなってくるってだけの話じゃないの?
浮動小数点数は0から離れれば離れるほど目盛りが大きくなっていくのだから。
sinの実装がマクローリン級数展開でなくても起こる問題だと思うが。
583デフォルトの名無しさん
2021/12/28(火) 01:43:08.31ID:NIM0c1vY
小学生多すぎじゃないか?
584デフォルトの名無しさん
2021/12/28(火) 09:17:10.46ID:p+qHklGW
おまえさん1人だろ
中学以後、いつ何を習うか知らないようだが
585デフォルトの名無しさん
2021/12/29(水) 21:49:37.03ID:+eZ32Uo6
>1e-20 は仮数部には1桁目からゴミが入っているが、倍精度ではゼロと見なす
mjk、

IEEE754の2進数形式の倍精度浮動小数点表示は
仮数部がケチ表現の52 bit(実質53 bit)で
指数部は-1022〜+1023なのやぞ
1e-20とか1×2^(-60)かそこらなので無問題で53 bit(=15.9桁)の精度ェ、
586デフォルトの名無しさん
2021/12/29(水) 21:55:43.45ID:+eZ32Uo6
>sin(x)=0の所は微分が1または-1、入力のずれがそのまま出力に出る所
x << 1のとき
sin(x) ≒ x
であることの見事な工学的応用、
587デフォルトの名無しさん
2021/12/29(水) 21:57:34.77ID:+eZ32Uo6
まつがえた |x| << 1 やったorz
588デフォルトの名無しさん
2021/12/30(木) 01:48:03.91ID:L6Vpkxay
よっしゃ、よっしゃ、おっちゃんがいいもん作ったろう
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、
589デフォルトの名無しさん
2021/12/30(木) 01:51:27.40ID:L6Vpkxay
やっぱ>>562というものが>>559の誤差の真相なのではな
いか
590デフォルトの名無しさん
2021/12/30(木) 02:32:05.49ID:7UdZ08Kf
>>588
結果見たけど、sin_valの値は、きっちり0から10000になったときに5桁精度悪化してるし、100000で6桁精度悪化してるのでは…?
591デフォルトの名無しさん
2021/12/30(木) 07:31:31.40ID:xtSEOuqd
>>589
パッと見だけど>>565が答えじゃねえの
浮動小数点てのは文字通り小数点位置が異なる
数値が1付近と100万付近じゃ精度が異なるのは当たり前
精度を保つなら固定小数点使わないと
592デフォルトの名無しさん
2021/12/30(木) 11:37:53.79ID:ZhVAaRAF
まだやってたのか小学生・・・ID変えてご苦労様
593デフォルトの名無しさん
2021/12/30(木) 11:39:17.39ID:ZhVAaRAF
何度も言ってるが>>560でこの話は終了している
594デフォルトの名無しさん
2021/12/30(木) 12:38:33.70ID:A3EHubzP
質問主が現れないからもう何議論しても無駄な気がする
ソースコードがあるわけでもないし

100万程度で誤差ヤバい言うぐらいだからfloatで計算してないか疑たくもなる
595デフォルトの名無しさん
2021/12/30(木) 14:43:33.58ID:Wt/MKF34
誰も計算機上のゼロについて理解できてない
596デフォルトの名無しさん
2021/12/30(木) 16:49:59.36ID:uaiyfMI5
もまいら、浮動小数点のゼロ判定どうしてる?
597デフォルトの名無しさん
2021/12/31(金) 00:22:01.38ID:kcosmPcn
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ではなく配列を使うというのはしたくないです
598デフォルトの名無しさん
2021/12/31(金) 00:36:47.69ID:ysmsTKqS
>>597
禁止しない
もしくはメンバ変数を非publicにしてgetter/setter
599デフォルトの名無しさん
2021/12/31(金) 05:02:18.38ID:zF3P5q1E
だから絶対値が1e-14とかより小さいかどうかだって

>>585なんかは全く理解してないようだが
600デフォルトの名無しさん
2021/12/31(金) 05:10:34.66ID:zF3P5q1E
ちなみにsinがゼロのとこは微分が1か-1でsinが1のとこは微分がゼロだから違うってのは、事実だが今回の事象の説明としては感覚的に過ぎるね

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

sinの挙動について理解したいなら実装に踏み込むしかないよ
あるいは>>576あたりで思考停止しとくか
601デフォルトの名無しさん
2021/12/31(金) 06:37:46.15ID:qJZ2APUI
>>597
アクセスを厳密に禁止したいなら、配列操作のみ定義したラッパークラスを用意して渡したほうが良い。
602デフォルトの名無しさん
2021/12/31(金) 08:06:29.68ID:FnYy2lty
んだね
603デフォルトの名無しさん
2021/12/31(金) 08:45:47.76ID:FPee+d5o
クラス T のメンバ関数で自身のコピーを返す(つまり返り値の型が T)ものを考える
メンバ関数の修飾が && のときは std::move(*this) とかしたいけどこれはいちいち書かないとダメ?
普通は std::forward で統一できるが
604デフォルトの名無しさん
2021/12/31(金) 09:05:22.16ID:FnYy2lty
*thisはxvalueではないからムブコンに渡したければstd::move()か(T&&)がいるね
605デフォルトの名無しさん
2021/12/31(金) 11:52:30.35ID:kcosmPcn
>>598
ありがとうございます
ただ、
>メンバ変数を非publicにしてgetter/setter
これだと結局setterでメンバ変数を変更できてしまいますよね?

>>601
ありがとうございます、検討してみます
606デフォルトの名無しさん
2021/12/31(金) 14:47:55.66ID:fEOKhR13
instance.field; が暗黙のうちに書き変わらないだけでも効果あるんだよ

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

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

>>597 冒頭の質問なら、参照渡し引数に
void f(const T&);
のようにconstつけとけばいい
607デフォルトの名無しさん
2021/12/31(金) 15:16:00.18ID:7kXupeFa
>>597
まだ標準に入ってないけど、propagate_const使うとか
https://ideone.com/O8a0hn
608デフォルトの名無しさん
2022/01/04(火) 07:21:58.04ID:5hvio7Nh
Packtpubが不安定になってるんだけど。
見れますか?
609デフォルトの名無しさん
2022/01/05(水) 21:49:37.99ID:2R8vvmqQ
クラステンプレートについて、明示的実体化しておけば実装を.cppでもできるというのを知ったのですが、その場合、テンプレートでない普通のクラスと同じように
部分的にヘッダに実装を書いて、残りを.cppに書く、というのは正式な書き方として許されるでしょうか?
610デフォルトの名無しさん
2022/01/05(水) 22:24:10.67ID:tiBxT68+
許される。
611デフォルトの名無しさん
2022/01/05(水) 22:48:02.56ID:2R8vvmqQ
>>610
ありがとうございます!
612デフォルトの名無しさん
2022/01/06(木) 15:12:35.27ID:C9LB+2SX
その昔、exportテンプレートというのがあってだな
613デフォルトの名無しさん
2022/01/07(金) 00:07:55.52ID:UgPywUlD
class T;

class C {
public:
T t;
};

とあったとき

C c{T()};

と集成体初期化を行うと T のコンストラクタが1回だけ呼ばれます
メンバ t をカプセル化してコンストラクタを自分で用意するとどうやっても T のムーヴコンストラクタが余計に1回呼ばれてしまうと思ったのですが回避する方法はありますか?
614デフォルトの名無しさん
2022/01/07(金) 02:01:17.79ID:uUhimsKL
>>613
直接的にはないけど
optionalとかvariantにあるin_placeコンストラクタと同じことをすればTのコンストラクタ呼び出しは一回で済みそう
615デフォルトの名無しさん
2022/01/07(金) 20:51:50.26ID:UgPywUlD
>>614
ありがとうございます!
616デフォルトの名無しさん
2022/01/09(日) 10:55:01.80ID:7BGFeByJ
>>597
配列の定義を vector<const testclass*> にすればよくない?
617デフォルトの名無しさん
2022/01/09(日) 11:30:20.08ID:BcvcYHng
外では変更するけど関数内では変更しないことを明示したいんでしょ
618デフォルトの名無しさん
2022/01/12(水) 09:32:50.44ID:kvnPCGqB
関数の定義で
auto foo() -> void{}
みたいに書くの見かけたけどこのやり方何かメリットありますか?
619デフォルトの名無しさん
2022/01/12(水) 12:16:01.64ID:SK9+pElf
あるね
auto s = std::string{"test"};
みたいな宣言とかも
620デフォルトの名無しさん
2022/01/12(水) 12:26:17.78ID:Z0p/7uhd
>>618は型推論効いてないやん
621デフォルトの名無しさん
2022/01/12(水) 12:28:40.33ID:VUzGdiiG
戻り値の型を->の先に書いてあるだけだよ。
だからこれはvoid型の戻り値ね。

利点は引数からdecltype使って戻り値の型を指定できるくらいじゃない?
622デフォルトの名無しさん
2022/01/12(水) 13:45:01.07ID:uq5/9jO3
https://www.fluentcpp.com/2018/09/28/auto-stick-changing-style/

この記事で論じられているね
623はちみつ餃子 ◆8X2XSCHEME
2022/01/12(水) 13:59:43.98ID:7Sv8jpqL
ラムダ式で返却値の型をどう書くかというのが後置スタイルを導入した直接の動機だと思う。

普通の関数で後置にするメリットがない場合であっても、
メリットがある場合とない場合で区別して使い分けるよりは全部を後置で一貫させたほうが綺麗だと思うこともあるだろ。
624デフォルトの名無しさん
2022/01/12(水) 17:10:39.04ID:VRtGvzgV
みずほが復旧をあきらめるとかどうみてもfukkyu
625デフォルトの名無しさん
2022/01/12(水) 18:43:03.08ID:NICGWYWs
人がつくったものネットから持ってきて何個も組み合わせて合体させるとみずほみたいになるんだろうな
自分で作ってない部分はメンテしようがないからな
626デフォルトの名無しさん
2022/01/12(水) 19:53:35.19ID:UH3nST5b
Windows serverにしたのが最大の間違い。
627デフォルトの名無しさん
2022/01/12(水) 20:51:55.49ID:VUzGdiiG
std::stringの大文字を全て小文字に変換するのってstd::transformより良いものあるの?
628デフォルトの名無しさん
2022/01/12(水) 22:50:55.12ID:VRtGvzgV
Windowsで文字列中の大文字を小文字に変換する_mbslwr()って今やランタイムで使えなくなってんだね、知らんかったわ
629蟻人間 ◆T6xkBnTXz7B0
2022/01/12(水) 23:14:22.56ID:htST1fFk
CharLower
CharLowerBuff
630デフォルトの名無しさん
2022/01/13(木) 21:50:13.52ID:bN4t5i1e
c++のexe → ライブラリA(c++のdll)

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

同じライブラリの同じ関数を呼び出してるのに
呼び出し元の形態によって挙動が変わるなんてこと有り得ますか?
631デフォルトの名無しさん
2022/01/13(木) 22:14:06.74ID:+PFReeTS
ライブラリも呼び出し元も外部の同名のdllをリンクしているけれども
呼び出し元が参照しているdllの実体が別だったとか。
632デフォルトの名無しさん
2022/01/14(金) 09:16:33.28ID:ovvIshUS
struct Vector2 { float x, y; };のような64bitで済んでしまうものの計算にSSE命令を使っても高速化は見込めないのでしょうか?
上記に対して_mm_mul_psを行うと上位2float分を余計に計算させることになってしまいますよね
633デフォルトの名無しさん
2022/01/15(土) 05:56:06.60ID:ps658RNN
>>603
deducing thisがC++23で入るね
634デフォルトの名無しさん
2022/01/15(土) 16:29:52.27ID:fx8S/FAM
>>632
余計に計算させるけど一命令で済むよ
ただし速度以外のデメリット出てくるけど
635デフォルトの名無しさん
2022/01/16(日) 12:31:04.34ID:20f7Ghpo
>>630
同じ関数というのが関数名と引数の数が同じというだけなら
extern "C" double sqrt(double x);
extern float sqrt(float x);
とから有り得る
636デフォルトの名無しさん
2022/01/17(月) 15:18:31.08ID:sD13NBSV
pair<int, int> の first と second に、例えば座標と向きのような意味をもたせてるとします
このとき、using なんかを使って pair<int, int> x の第一要素と第二要素に x.pos、x.dir のようにアクセスする方法ってありますか?
637はちみつ餃子 ◆8X2XSCHEME
2022/01/17(月) 15:34:47.07ID:jU2WrI4n
>>636
C++ ではメンバ (のように見えるもの) を後から生やすことは出来ない。
638デフォルトの名無しさん
2022/01/17(月) 16:04:32.58ID:+6BKuldY
auto& [x, y] = obj;
x = 100;
y = 100;

動くかは試してない
639デフォルトの名無しさん
2022/01/17(月) 16:07:55.78ID:h5bglXe3
>>636
そういうあちこちで使う用途の、はっきり意味が決まった構造体は
pairやtupleに頼らない方が(大抵の場面では)便利だよ
その一箇所でしか使わないならpairでいいと思うけど
640はちみつ餃子 ◆8X2XSCHEME
2022/01/17(月) 16:18:00.13ID:jU2WrI4n
いくつかの要件を満たして "Tuple-like" であるようなクラスはタプルのように扱える仕組みがある。
タプルを多用途に使うよりは個別のクラスを作った上でタプルのインターフェイスを持たせるほうが
使いやすくなると思う。
641デフォルトの名無しさん
2022/01/17(月) 16:55:14.33ID:aOF99LGB
>>636
まず構造体を勉強しよう
642デフォルトの名無しさん
2022/01/17(月) 17:09:52.53ID:bBHBfELI
struct だと困るんですか?
643デフォルトの名無しさん
2022/01/17(月) 17:35:43.45ID:AdXHrviP
みなさん御機嫌よう
このスレには何度も助けられているものです
再度お知恵を拝借したいです

任意のユーザー定義型のインスタンス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(){}
644はちみつ餃子 ◆8X2XSCHEME
2022/01/17(月) 17:43:03.78ID:jU2WrI4n
老眼なので Hantei が Hentai に見えた。
645はちみつ餃子 ◆8X2XSCHEME
2022/01/17(月) 17:49:59.30ID:jU2WrI4n
>>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;
}
646デフォルトの名無しさん
2022/01/17(月) 20:36:31.89ID:PMmhhAT1
dynamic_cast<base*>(hoge)がnullptrかどうかを見ろ
647デフォルトの名無しさん
2022/01/17(月) 20:47:22.64ID:6BYLlYWJ
>>643
bool exHentai(){
return std::is_base_of_v<base, std::remove_reference_t<decltype(hoge)>>;
}
648デフォルトの名無しさん
2022/01/17(月) 20:49:09.31ID:AdXHrviP
>>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の機序が違うのかな……?
649デフォルトの名無しさん
2022/01/17(月) 21:03:17.46ID:PMmhhAT1
だからdynamic_castで調べろって
そのための機能だから
650デフォルトの名無しさん
2022/01/17(月) 21:36:21.92ID:AdXHrviP
>>649
ありがとうございます!!!
確認しましたところ自分の思っている動作が得られました☆*:.。. o(≧▽≦)o .。.:*☆
こんなに簡単に出来るとは、is_base_ofの使い所さんはどうなってしまうんだ。。。

レスへの返信を書きながら、自分でもコード確認やリファレンスを検索していたため、スレの確認が遅くなってしまい、多くの型と行き違いになってまいました。
返信をくださった方々には重ね重ねお礼申し上げます。
まだまだ弱輩者ですが、これからも生暖かい目で返信くださると幸いです。
皆さんありがとうございます!
651はちみつ餃子 ◆8X2XSCHEME
2022/01/17(月) 21:36:54.84ID:jU2WrI4n
>>648
動的型で継承関係を確かめるなら >>646 が述べている通り dynamic_cast で実際に変換してみるのは手っ取り早い方法だと思う。

> 生のWantToFind型が出てくるかと思ったのですが……

「生の」ってなんやねん。
その場合の *VecBasePtr[0] の静的型はあくまで base だよ。
オブジェクトの base である部分 (サブオブジェクト) が取り出される。
いわゆるスライシング。
652デフォルトの名無しさん
2022/01/17(月) 21:37:50.95ID:AdXHrviP
dynamic_castは知ってたはずなのに思い出さなかったというか思いつかなかった……
653デフォルトの名無しさん
2022/01/17(月) 21:46:56.12ID:AdXHrviP
>>651
ありがとうございます。

自分はスライシングもちゃんと理解してないですね……
ポインタのメモリ確保サイズが一様に8バイト(4バイト)なので、基底型が派生型の型を丸ごと格納している(派生型のポインタを確保している)と理解していました。。。(*を付けると派生型が出てくる)
悪魔でも基底型なのですね?
キャストで受けるまでは基底型として扱われるので、型情報が合致しなかったのかな。
type_infoは、全く別の型を型合致に使うから*baseが有効なのかな。
654デフォルトの名無しさん
2022/01/17(月) 21:55:40.15ID:h5bglXe3
dynamic_castって仮想関数テーブル必要じゃなかったっけ?
まぁいずれにせよ仮想関数テーブルでぐぐればそこらへんの理解が進むと思う
多分
655デフォルトの名無しさん
2022/01/19(水) 17:29:06.73ID:u/w202Yd
スライシングとか知らない単語使わないで
656デフォルトの名無しさん
2022/01/19(水) 18:16:17.94ID:oZ05fVjC
用語って大事だよな
言葉遣いがおかしいの指摘されると逆ギレする
DQN気質なやつが残念ながら後を経たない
657デフォルトの名無しさん
2022/01/20(木) 05:34:44.25ID:tJtJ60TC
https://cpplover.blogspot.com/2018/07/c20.html?m=1
汎用エイリアス宣言の提案ってどうなったんだろう
658デフォルトの名無しさん
2022/01/20(木) 09:07:39.69ID:PFfSIkf2
#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
659デフォルトの名無しさん
2022/01/20(木) 09:24:47.83ID:MuVW7weO
名前衝突してんじゃないの?
660デフォルトの名無しさん
2022/01/20(木) 09:37:40.24ID:PFfSIkf2
<locale>のテンプレートが干渉してるっぽいことはわかった
これ、俺の落ち度なの?
661デフォルトの名無しさん
2022/01/20(木) 13:32:22.34ID:NzUGMacM
>>660
オーバーロードやデフォルト引数が追加される可能性があるから、
一般的に標準ライブラリ関数のアドレスは取れないと思ったほうがいい。
https://isocpp.org/std/standing-documents/sd-8-standard-library-compatibility
662デフォルトの名無しさん
2022/01/20(木) 18:29:19.36ID:PFfSIkf2
ぐぶー・・・
663デフォルトの名無しさん
2022/01/20(木) 22:37:24.73ID:Df2OyNH0
ランタイムサポートが必要なC++言語機能ってRTTIやdynamic_cast、例外くらい?
664デフォルトの名無しさん
2022/01/20(木) 23:29:32.85ID:a5eQ4sV9
そもそもランタイムサポートの定義をちゃんとしないとな・・・
665デフォルトの名無しさん
2022/01/21(金) 00:00:01.47ID:/d5tBos9
RTTIも例外も標準C++の一部
それが使えないような設定は厳密には規格違反だし、それで高速化や効率化しますってのは各コンパイラの独自機能に過ぎない
666デフォルトの名無しさん
2022/01/21(金) 01:04:31.52ID:VVQk5y8F
アホすぎるw
667デフォルトの名無しさん
2022/01/21(金) 07:18:18.80ID:j/G12RQ8
dynamic initializationも裏で色々やってるね
668デフォルトの名無しさん
2022/01/21(金) 07:28:47.34ID:VVQk5y8F
とりあえずOSないところか、簡単な仕組みしかないところでC++で何か書いてみればいいよ
処理系が何をしてくれているのか分かる
669デフォルトの名無しさん
2022/01/21(金) 07:43:11.40ID:j/G12RQ8
ベアメタルはオモロイ
670デフォルトの名無しさん
2022/01/21(金) 07:59:33.55ID:j/G12RQ8
658だけど、自己解決の報告。
テンプレートにしないで
void test(int(*f)(int)){}
にしたら<locale>のisprintが干渉しなくなった
最初の発想がいかんかった
671デフォルトの名無しさん
2022/01/21(金) 08:26:30.46ID:VVQk5y8F
isprintのテンプレート引数が決まらないからだろ
test(std::isprint<int>);
とかなら通ると思う
672デフォルトの名無しさん
2022/01/21(金) 08:32:03.82ID:VVQk5y8F
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>);
}
673デフォルトの名無しさん
2022/01/21(金) 08:47:07.93ID:VVQk5y8F
元のコードをなるべく変えずにだと
#include <string>
#include <cctype>
template <typename F>
void test(F&& f){}
int main(){
test(static_cast<int (*)(int)>(std::isprint));
}
※オーバーロードを選択させるべくキャストする
674デフォルトの名無しさん
2022/01/21(金) 09:54:53.25ID:j/G12RQ8
conceptでテンプレートテンプレート引数を弾いたりできないかとも思ったけど
SFINAEは関数の除外なので引数の候補を絞るのは無理だった
675デフォルトの名無しさん
2022/01/22(土) 10:28:58.52ID:om6KWGu4
class A { static inline struct SubStruct { int value; } Field1; } //通常の構造体のスタティックメンバ変数はヘッダファイル、cppファイル共に実体は同じ
class A { static inline struct { int value; } Field1; } //無名構造体のスタティックメンバ変数はヘッダファイルとcppファイルとでそれぞれ別の実体が生成されアドレスが異なる

この挙動は仕様なのでしょうか?
676デフォルトの名無しさん
2022/01/22(土) 10:57:07.60ID:OQdcFc3P
名前書き忘れて0点取ったことないのか
677デフォルトの名無しさん
2022/01/22(土) 11:38:04.16ID:+VFNw8nk
今だと仮想関数とvariantとどっち使うのが主流ですか?
678デフォルトの名無しさん
2022/01/22(土) 11:49:22.43ID:XNgWTOyh
>>675
名前のない構造体には実体がなく外部リンケージを持たないのでそこに対するinline指定は無視されるってことでは?
分かりにくいけど仕様として矛盾してはいないと思う
679デフォルトの名無しさん
2022/01/22(土) 13:06:33.51ID:BllOBQpy
>>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.
680デフォルトの名無しさん
2022/01/22(土) 13:08:52.36ID:BllOBQpy
>>678
あと仮にinline指定が無視されたとしても「別の実体が生成される」というような動作には繋がらないね。
681デフォルトの名無しさん
2022/01/22(土) 13:59:06.18ID:0LC8SyT+
>>599
アーハン?
doubleで表現可能な最小の数と1e-14の大小関係もわかんない人なんですかね、、、
682デフォルトの名無しさん
2022/01/22(土) 14:05:40.45ID:0LC8SyT+
>>593
その2π周期というのが厳密に2*M_PI周期であることの根拠は?
>>560の時点ではそれは示されていなかった
>>588で2*M_PI周期と言う実験結果がデタ
683デフォルトの名無しさん
2022/01/22(土) 14:11:22.71ID:0LC8SyT+
>>596
万能の一般論は無い(キリ
なぜなら、f(x)が0かどうかの判定をしたいとして、±|處を0とみなすべきなのかは
f(x)の精度に依存するから
ただし、>>560式に f(x1) と f(x2) の等値判定なら >>560式にやりうる
これは f(x1) - f(x2) のゼロ判定として>>560式にやればよろっし
684デフォルトの名無しさん
2022/01/22(土) 14:15:01.32ID:0LC8SyT+
アンカーミスった;;;orz
s/>>560/>>588/g
685デフォルトの名無しさん
2022/01/22(土) 16:12:55.51ID:13b+4FON
>>681
O(1) の数値を使って計算してたら例えば 1e-15 以下の数値をゼロと見なすとかするより他ないでしょ
バカ?
686デフォルトの名無しさん
2022/01/22(土) 16:30:03.25ID:OQdcFc3P
sedかよ
687デフォルトの名無しさん
2022/01/22(土) 16:59:40.11ID:gWLf+Bka
知らなくて驚くかもしれないけどdoubleは1e-324も表せちまうんだ
688デフォルトの名無しさん
2022/01/22(土) 17:34:26.32ID:UJcbhjLZ
>>681-687
まだやってたのか小学生・・・ID変えてご苦労様
何度も言ってるが>>560でこの話は終了している
689デフォルトの名無しさん
2022/01/22(土) 17:48:02.61ID:vZsc1PCZ
>>687
そこまで拗らせてる事に驚いたわw
690デフォルトの名無しさん
2022/01/22(土) 19:34:50.12ID:DSkywrpw
>>560
>100万をsin()しても、sin()は2π周期
>doubleの精度15桁中の5桁以上を無駄にしている

これよくわからん。
691デフォルトの名無しさん
2022/01/22(土) 20:03:51.19ID:0LC8SyT+
言ってる当人もわかってないんだろJK
692デフォルトの名無しさん
2022/01/22(土) 20:37:14.45ID:0LC8SyT+
double sin(double x)の精度が±10E-10程度らしいことは>>588の結果が示しているが
こっれはxが100万かどうかによらないことも結果が示してゐる
実装を見ないとわからんが、多分マクローリン展開の打ち切りによる誤差とみるべき
693デフォルトの名無しさん
2022/01/22(土) 21:05:23.18ID:yfbq4hUz
>>692
実装見てから言った方がいいよ。マクローリン展開というが、0を基準にマクローリン展開してるわけないだろ。
694デフォルトの名無しさん
2022/01/22(土) 21:18:55.93ID:0LC8SyT+
>>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 はイコールにならにあ
695デフォルトの名無しさん
2022/01/22(土) 21:22:04.30ID:0LC8SyT+
>>693
sin(x)の場合は|x|<<1においてsin(x) ≒ xなのでsin(x+a)を展開をする際のaを0にするのが妥当に思えまっする、
696デフォルトの名無しさん
2022/01/23(日) 04:16:28.14ID:QgynSmAQ
>>689-695
まだやってたのか小学生・・・ID変えてご苦労様
何度も言ってるが>>560でこの話は終了している
697デフォルトの名無しさん
2022/01/23(日) 09:39:04.54ID:CWW/bMN0
>>678
挙動としては正にそんな感じですね

>>679
test.hにあるinline void 内でprintf("%p\n", Field1)、test.cppのvoid Func1内で同様の事をして確認しました
出力のみならず、そもそもヘッダのinline void内でField1に値をセットしたはずなのにソース内ではデフォルト値のままで動作が狂ったので上記のテストをして発覚した次第です
structを名前付きにするかしないかの一点だけで上記の結果が変わります
698デフォルトの名無しさん
2022/01/23(日) 09:40:35.92ID:CWW/bMN0
>>697
printf("%p\n", Field1)はレス間違いでprintf("%p\n", &Field1)で実験しています
699デフォルトの名無しさん
2022/01/23(日) 10:41:30.96ID:QgynSmAQ
#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;
}
無名で実体の定義なんてできんのか?
700デフォルトの名無しさん
2022/01/23(日) 10:43:19.72ID:vZkrAotW
キャストやconst&でできるな
701デフォルトの名無しさん
2022/01/23(日) 10:47:03.39ID:QgynSmAQ
>>700
どうやんの?上の例でやってみてよ
702デフォルトの名無しさん
2022/01/23(日) 10:48:14.26ID:QgynSmAQ
ちなみに上の例は無名でない構造体で、実体の定義は
A::SubStruct A::Field1;
703デフォルトの名無しさん
2022/01/23(日) 10:51:00.92ID:CWW/bMN0
>>699
C++20だか17だかからはinlineをつける事で出来ます
704デフォルトの名無しさん
2022/01/23(日) 10:51:47.13ID:QgynSmAQ
#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
705デフォルトの名無しさん
2022/01/23(日) 10:55:02.08ID:vZkrAotW
>>700

A::SubStruct{}
で実体の「定義」ができる

&A::SubStruct{}
は実体がprvalueという理由でエラーだが
実体を定義できるか否かとは別問題だ
706デフォルトの名無しさん
2022/01/23(日) 10:57:42.35ID:QgynSmAQ
>>705
根本的に意思疎通できてないみたいだな
staticメンバA::Field1の実体定義だって
707デフォルトの名無しさん
2022/01/23(日) 10:59:48.93ID:vZkrAotW
>>706
そのようだな
なぜstaticメンバが出てくるのか不明だ
708デフォルトの名無しさん
2022/01/23(日) 11:04:13.16ID:QgynSmAQ
>>703
確かに出来た
-std=c++17
付けたら実体定義なくても通った
709デフォルトの名無しさん
2022/01/23(日) 11:05:12.08ID:QgynSmAQ
コードはこんなのね(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;
}
710デフォルトの名無しさん
2022/01/23(日) 11:25:38.49ID:QgynSmAQ
実体は同じのを指すようで再現しなかったな。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
711デフォルトの名無しさん
2022/01/23(日) 15:40:28.67ID:K/S7vg9Z
>>697-698
wandbox の gcc 11.1.0 でもやってみたけど、再現せず同じアドレスが出た。
https://wandbox.org/permlink/SSg6OZD97wmgR8kq
コンパイラやバージョンやコンパイルオプションを合わせれば再現するのかね?
712デフォルトの名無しさん
2022/01/23(日) 15:53:41.49ID:QgynSmAQ
>>711
複数のオブジェクトファイルにしないと検証できないと思うよ
713デフォルトの名無しさん
2022/01/23(日) 16:09:46.74ID:K/S7vg9Z
>>712
>>697の説明にあるtest.cppはtest.hをインクルードしてるんだろうからこの形でいいだろうと思った。

まぁやってみたけど、変わらないね。
https://wandbox.org/permlink/hfbakWmCF1i5stqr
714デフォルトの名無しさん
2022/01/23(日) 16:31:20.27ID:QgynSmAQ
>>713
流石にヘッダファイルから何かが生成されることはないw
wandboxで複数オブジェクトファイルって処理系内部の作り次第になるし、>>710でもやってみようかと思ったけど、3つは無理そうだね
715デフォルトの名無しさん
2022/01/23(日) 17:20:50.76ID:hHkcGLX7
ヘッダに実装書くと管理が楽だよね
716デフォルトの名無しさん
2022/01/23(日) 17:32:20.44ID:CWW/bMN0
>>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にしたら不一致
本当に他は一切いじらずに名前の有無だけで変わります
717デフォルトの名無しさん
2022/01/23(日) 17:54:11.09ID:QgynSmAQ
現象を再現させる最小限のコードを全セット載せないと先には進まんて
始めからそうしてればこんなにいろいろ書かずに済んでいる
718デフォルトの名無しさん
2022/01/23(日) 18:17:03.90ID:K/S7vg9Z
>>714 wandbox でも -v 追加で as が2つ test.cpp と prog.cc と別で走ってるのまでは見た。
719デフォルトの名無しさん
2022/01/23(日) 18:18:38.46ID:K/S7vg9Z
>>716
MSVC のバグっぽいね。おとなしく名前つけて回避しつつ、できればバグ報告しとくのがいいんじゃない。
720デフォルトの名無しさん
2022/01/23(日) 20:02:54.49ID:QgynSmAQ
>>715
>>675で「無名構造体のスタティックメンバ変数はヘッダファイルとcppファイルとでそれぞれ別の実体が生成されアドレスが異なる」
と書いてあるが、ヘッダファイルから直接実体は生成されないよってこと
.cppなどのソースファイルからincludeされないとコンパイルしないから
(もちろんただのファイル名なのでコンパイラに直接ヘッダファイルをコンパイルせよと指定する事はできる)

つまりA::Field1に該当するシンボルが複数の.objに含まれた場合、同じになっているか=アドレスが同じになるか?
の検証でないと意味がない
721デフォルトの名無しさん
2022/01/23(日) 20:09:37.28ID:QgynSmAQ
>>718
それは昔からgccを使ってる人は知ってるけど、そういう話じゃない
明らかに不自然な位置にソースファイルを指定して無理矢理2個同時にコンパイルする上に、引用されて3個はできない
つまり想定された使い方ではないということ
おまけに処理系やそのバージョンを複数変えられることが比較的便利なwandboxで、処理系を変えると確認が必要になるやり方はどうかと言っただけ
まあ、分かってるとは思うんだが
722デフォルトの名無しさん
2022/01/23(日) 20:24:03.88ID:QgynSmAQ
とりあえず、710のコードでVS2019を調べた結果、再現は確認できた。
ただし、コンパイルオプション次第で現象が出たり出なかったりする。
VS2022でもないし、VSはコンパイルリンクオプションがデフォルトで大量に指定されてて確認が面倒なのでそれ以上は放棄した。
以下のコードではpermissive-オプションの有無で現象が再現したりしなかったりするが、デフォルト時だとその切替えで現象は変わらないので、一次原因ではないと思う。
723デフォルトの名無しさん
2022/01/23(日) 20:24:36.31ID:hHkcGLX7
保守できないような書き方して自分の仕事を守る。PGの当然の権利ですよね。
724デフォルトの名無しさん
2022/01/23(日) 20:25:06.27ID:QgynSmAQ
> 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もよく知りません。
725デフォルトの名無しさん
2022/01/23(日) 20:34:19.55ID:K/S7vg9Z
>>721 ソース3つ以上もできるよ。 https://wandbox.org/permlink/UgIc9mFrs59059jq
726デフォルトの名無しさん
2022/01/23(日) 20:40:05.18ID:QgynSmAQ
>>723
そういうのはプロジェクトの方針だと思うので、ここで話す内容ではないと思うよ
727デフォルトの名無しさん
2022/01/23(日) 20:45:20.80ID:QgynSmAQ
>>725
改行と空白で違うのかよw b烽、知るかってャ激xルだけど、bりがと
bニりあえず>>710を載っけとく
https://wandbox.org/permlink/e8khwggKe00rtekJ
728デフォルトの名無しさん
2022/01/23(日) 20:49:22.51ID:QgynSmAQ
>>723
>>727は何故だか文字が化けてたので一応書き直しとく。

改行と空白で違うのかよw もう知るかってレベルだけど、ありがと
とりあえず>>710を載っけとく
https://wandbox.org/permlink/e8khwggKe00rtekJ
729デフォルトの名無しさん
2022/01/24(月) 19:27:55.24ID:WxnVLAIm
C++11から、C++20までの変更点を解説した入門書を年末に買ったのだが(C++は書けるよ)、まだ読む気になれないw
「今更C++か、pythonでいいだろ」と悪魔が囁くw
730デフォルトの名無しさん
2022/01/24(月) 19:42:15.63ID:nLfFXIoN
c++cliについてネットに解説している情報あまり無いですが、まとまってるサイトとかないですかね。
731デフォルトの名無しさん
2022/01/24(月) 20:29:40.39ID:kghIRcG8
https://docs.microsoft.com/ja-jp/cpp/dotnet/dotnet-programming-with-cpp-cli-visual-cpp?view=msvc-170
732デフォルトの名無しさん
2022/01/25(火) 08:07:34.25ID:m+e4/QVD
めずらしい
変態に興味あるとは
VisualJ++とかワケワカだったぜw
733デフォルトの名無しさん
2022/01/26(水) 05:15:43.56ID:DGJ/MazB
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()が呼ばれた時に描画だけでなく画面の更新もされるようにするにはどうすればよいですか?
734デフォルトの名無しさん
2022/01/26(水) 06:35:00.77ID:R08bxH5q
WM_TIMERでBeginPaintはおかしいぞ
WM_PAINT専用なんだから
無効領域ないのにBeginPaintしたらあかん

[誘導] 続きはこっちでな
Win32API質問箱 Build127
http://2chb.net/r/tech/1639053176/
735デフォルトの名無しさん
2022/01/26(水) 07:17:52.16ID:T9eKedNN
InvalidateRectとかGetDC〜ReleaseDCだっけ?
736デフォルトの名無しさん
2022/01/26(水) 07:50:18.18ID:td9ayUMw
アップデートはマイクロソフトがやりたい時にやる
という基本理念を理解していないようだね
737デフォルトの名無しさん
2022/01/26(水) 09:14:18.23ID:m89Xdimf
WM_TIMERでInvalidateRectしておくとWindowsがWM_PAINT呼んでくれるからそこで描画するんだっけ
738デフォルトの名無しさん
2022/01/26(水) 09:17:55.57ID:qvNTvCwo
そもそもこれCだろ…
WinMainから書く超基礎的コードをここで聞く頭がもうね
739デフォルトの名無しさん
2022/01/26(水) 09:26:13.12ID:WR8doP3S
べつにアイドルループで描画してもいいんだよ
メッセージの処理さえ忘れずにピークしてこなせば
740デフォルトの名無しさん
2022/01/26(水) 09:32:54.79ID:g/1zEXcm
>>738
スレチなのは確かだが、いちいち見下して何がしたいんだお前
741デフォルトの名無しさん
2022/01/26(水) 09:36:18.65ID:dkXO6/An
どこにでもいるんだよ
自分より下の者をいたぶることで
安心しようとするチンピラ気質なやつは
742デフォルトの名無しさん
2022/01/26(水) 10:21:44.17ID:qvNTvCwo
だってココ定期的に湧くじゃん
Windows使っててWin32APIの使い方聞いてくるC++ほとんど知らない自称天才のバカ
同じやつだよきっと
毎回Win32APIに誘導されてるってのにな
743デフォルトの名無しさん
2022/01/26(水) 10:46:25.17ID:g/1zEXcm
あー、言われれば確かにそんなの居たっけ・・
でもまぁ同一人物とは限らないんだし誘導して終わりでいんじゃね
たまに見当違いの初心者は入ってくるし(DirectXスレにDirectXランタイムのインスコの仕方聞きにきた猛者が居た
744デフォルトの名無しさん
2022/01/26(水) 10:59:27.08ID:vhiSf69I
733 すいません、そっちのスレは知りませんでした
そちらで聞き直します
745デフォルトの名無しさん
2022/01/26(水) 11:06:01.05ID:qvNTvCwo
DirectXスレにDirectXランタイムのインスコの仕方聞くのはまだ仕方ない話
ドライバ固有の問題に当たっているなら専門家に聞いた方がいいだろう

自称天才のバカである確率の方が高いと思うし、高確率で単発IDで荒らすバカも同じだろうし、わざわざレスしてくるやつも同じだろうから、バカにはバカと言ってあげた方が親切
746デフォルトの名無しさん
2022/01/26(水) 12:02:29.99ID:dkXO6/An
誘導ももう済んでるのに
どうしても喧嘩言葉を使いたくて沸いてくる
三下のそのまた下の家畜はいいのか
747デフォルトの名無しさん
2022/01/26(水) 13:23:53.73ID:m89Xdimf
DirectXランタイムが許されるならWin32 APIだって許してあげなよ
製品名はVisual C++だし、既定の拡張子 .cpp なんだから Win32はC++ではなくCだって言ってもしょうがない
748デフォルトの名無しさん
2022/01/26(水) 23:06:08.50ID:UuxYD5f6
いかにも漏れは天才だが
さすがにWinMain()から書くようなバリバリWindowsアプリの質問はしないかなあ、、、
漏れの言ってることがまるで理解できない低レヴェル凡人の反発を招くことはあってもな
749デフォルトの名無しさん
2022/01/27(木) 10:59:27.25ID:Z+Vqme3O
天才でも質問することあるんですね
回答者は超天才?
750デフォルトの名無しさん
2022/01/27(木) 11:49:44.22ID:avZQ9Wm7
いかにも
私が超天才だが
ってどっかのハンコ貰いにいく人事のCMみたい
751デフォルトの名無しさん
2022/01/29(土) 15:04:46.13ID:mo0R2qbj
大学の課題でコンパイルエラーになるので教えてもらいないでしょうか
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エラー
}
752751
2022/01/29(土) 15:50:41.96ID:mo0R2qbj
失礼、自己解決しました。
namespaceをa.hだけ括って、a.cppに入れ忘れましたw
753デフォルトの名無しさん
2022/01/31(月) 02:23:38.98ID:iz74n4+D
下の★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

}
754はちみつ餃子 ◆8X2XSCHEME
2022/01/31(月) 04:05:32.34ID:y6tOo2ii
>>753
そのようには書けない。 C++ では高階多相を許していない。
755デフォルトの名無しさん
2022/01/31(月) 04:18:19.49ID:o5RGUewZ
なんでも適当に済ますクセ
高級言語に慣れすぎの弊害
756デフォルトの名無しさん
2022/01/31(月) 14:49:02.61ID:y2HjUy1l
>>753
・まず、Sumを多重定義にする必要性は特にないはず
・次に、fooが関数でSumが関数テンプレートの場合、
 関数の実引数として具現しないテンプレートは渡せない

だからfooの代わりにstd::bindを使っても解決しない

・テンプレートテンプレート仮引数を使っても
 クラステンプレートしか渡せず関数テンプレートは不可

こうなるとマクロくらいしか手がない
#define foo(func, ...) func(__VA_ARGS__)
757デフォルトの名無しさん
2022/01/31(月) 16:24:09.60ID:4mzN2AL1
戻り値の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;
// | ^
758デフォルトの名無しさん
2022/01/31(月) 20:55:29.83ID:ExACmeMg
>>753
auto Sum = [](auto head, auto... rests) { return (head + ... + rests); };
759デフォルトの名無しさん
2022/01/31(月) 22:50:37.06ID:67CF9RIT
ラッパークラスを通せば似たようなことはできそう。

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";
}
760デフォルトの名無しさん
2022/02/01(火) 04:38:50.89ID:X9o0BiPI
クラスは不要だった。
ラムダなら通るみたいだから、 >>758 みたいに元の関数をラムダで書くか、

auto wrapper = [](auto... args) { return Sum(args...); };

みたいなラッパー関数オブジェクト通すかってあたりで足りそう。

// 最初実験してたとき、ラムダ式にしただけだとエラー出てた気がしたんだけど、今やると問題なく通る…
761デフォルトの名無しさん
2022/02/01(火) 05:38:09.33ID:wGiSz27Y
おお、auto... なんてできたのか
762デフォルトの名無しさん
2022/02/01(火) 07:53:40.48ID:vPA4cgbg
>>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;
}
763デフォルトの名無しさん
2022/02/01(火) 22:23:26.64ID:rdLB3H0G
c++では
sz=120;
char dt[sz];
このように配列のサイズを変数の可変サイズで指定することはできないんですか?
これを実現する方法は何かありませんか?
764デフォルトの名無しさん
2022/02/01(火) 22:43:02.67ID:rdLB3H0G
自己解決しました
しかし dt[10][d] のように2次元以上はjavaのような動的変動はできないんですね
765デフォルトの名無しさん
2022/02/01(火) 23:27:31.22ID:fhOfpvRh
vector使わんの?
766デフォルトの名無しさん
2022/02/01(火) 23:28:28.99ID:hJiWfYJV
配列使わんし
767デフォルトの名無しさん
2022/02/01(火) 23:30:45.06ID:Sh1zYLGa
>>763
arrayという似たようなやつはあるが
基本的に作法が違う
768デフォルトの名無しさん
2022/02/02(水) 10:03:42.12ID:pPu7Tazo
コンストラクタ・テンプレートでテンプレート実引数を推定させず明示的に与えるのはどう書く?

struct some_class
{
template <class A> some_class(int) {}
};

int main()
{
some_class obj<void>(1); //error
}
769デフォルトの名無しさん
2022/02/02(水) 12:11:02.47ID:ryNE78sg
>>768
コンストラクタには明示的に型引数を渡せない
770デフォルトの名無しさん
2022/02/02(水) 12:36:54.65ID:pPu7Tazo
そっか。。。残念
thx >>769
771デフォルトの名無しさん
2022/02/02(水) 12:56:51.10ID:X/91R13x
ファイルサイズを取得しようとしていろいろサイトを参考にして次のようにしたのですが
std::filesystem::file_size(path)
filesystemのところに赤線が出て使用できません
これらは記述しています
#include <iostream>
#include <fstream>
#include <filesystem>
使っているのはCommunity 2019です
filesystemが使えないのはなぜでしょう?
772デフォルトの名無しさん
2022/02/02(水) 13:02:34.63ID:ryNE78sg
>>771
filesystemが使えるのはC++17以降

プロジェクトの設定から言語バージョンをC++14(既定)->C++17に
773デフォルトの名無しさん
2022/02/02(水) 13:34:32.24ID:pPu7Tazo
>>771
/std:c++17は指定してる?
774デフォルトの名無しさん
2022/02/02(水) 13:43:30.57ID:X/91R13x
ありがとうございます C++17指定できました
775デフォルトの名無しさん
2022/02/03(木) 12:49:10.84ID:d1XPVqCl
filesystemは、できればC++20モードで使いたい
file_clockまわりがC++17ではgdgdだから
776デフォルトの名無しさん
2022/02/04(金) 13:06:35.94ID:ovGR74Kw
小文字に変換するプログラムです
string toLowerCase(const string& str)
{
string lower = str;
std::transform(lower.begin(), lower.end(), lower.begin(), std::tolower);
return lower;
}
実行するとstd::transform 一致するオーバーロードする関数が見つかりません、とか
6引数が必要です 4が設定されてます、とか出て
実行できません
これは何が問題なのでしょうか?
777デフォルトの名無しさん
2022/02/04(金) 13:07:58.25ID:N/NFryku
tolowerが多重定義関数だからじゃね?
778デフォルトの名無しさん
2022/02/04(金) 13:22:13.60ID:ovGR74Kw
自分では他に定義してないんですがどこで定義されてるんでしょう
779はちみつ餃子 ◆8X2XSCHEME
2022/02/04(金) 13:28:07.50ID:RpLWwySn
>>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;
}
780デフォルトの名無しさん
2022/02/04(金) 13:35:40.02ID:ovGR74Kw
ありがとうございます ビルド通ったみたいです
781デフォルトの名無しさん
2022/02/04(金) 13:55:24.36ID:3M0ClPfa
最近のはptr_funやんなくても通んだな
782デフォルトの名無しさん
2022/02/05(土) 11:50:25.88ID:DOE5sh/+
template<yyy T>//yyyはコンセプト
requires !xxx<T>//xxxはコンセプト
void test(const T& a);//yyyのコンセプトを満たしxxxのコンセプトを満たさないものについて処理したい

C++20のコンセプトのrequires節って!使うと警告出るのでわざわざ否定用のコンセプト作成して対応してるんだけど、もっと簡単な仕組みない?
783デフォルトの名無しさん
2022/02/05(土) 11:52:48.48ID:vpksE3yJ
requires (!xxx<T>)
784デフォルトの名無しさん
2022/02/05(土) 12:04:00.17ID:DOE5sh/+
解決した!ありがとう!
785デフォルトの名無しさん
2022/02/05(土) 20:23:31.04ID:Irrrknzv
#define FOO() 1

#if FOO
...
#endif

と書いた場合FOOの後ろに()付けるの忘れてるのでコンパイルエラーになって欲しいんですが
実際はFOOは偽に評価されてるみたいです
何が起きてるんでしょうか?
786はちみつ餃子 ◆8X2XSCHEME
2022/02/05(土) 20:31:08.99ID:NEwj3nV7
>>785
#if の条件の部分ではマクロ展開できるものを全部展開したあとに知らない識別子が残ったら 0 と解釈する。
787デフォルトの名無しさん
2022/02/05(土) 20:32:57.42ID:BHACckaU
>>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, ...
788デフォルトの名無しさん
2022/02/06(日) 01:29:50.60ID:Yc7Iwiyd
>>785
バカですか?
789デフォルトの名無しさん
2022/02/06(日) 01:32:54.82ID:3BxbnhGH
#if defined(FOO)
...
#endif
790デフォルトの名無しさん
2022/02/06(日) 01:34:05.59ID:Yc7Iwiyd
Cの基本が出来てないくせにC++を使いこなせると思うなよ
791デフォルトの名無しさん
2022/02/06(日) 01:35:00.88ID:H2F64OwB
横からだけど知らなかった
792デフォルトの名無しさん
2022/02/06(日) 03:28:00.08ID:XnD7OQcd
>>786
>>787
ありがとうございます
このルールは知りませんでした
793デフォルトの名無しさん
2022/02/06(日) 06:46:34.29ID:qvD4QsX7
こういう馬鹿のためにコンパイラに無駄なルールが必要になるんだなと実感
794デフォルトの名無しさん
2022/02/06(日) 06:55:06.64ID:usxBX4wT
エラーにならないのは理不尽だな
795デフォルトの名無しさん
2022/02/06(日) 08:23:12.41ID:qvD4QsX7
馬鹿のためにわざわざプリプロセスで構文解析エラーを要求するとか馬鹿の極み
796デフォルトの名無しさん
2022/02/06(日) 08:30:29.95ID:usxBX4wT
FOOが0になる根拠を与えていないだろ
関連付けられていないものが出てくるのがおかしいと思わないとしたらPG適性低いぞ
797デフォルトの名無しさん
2022/02/06(日) 08:53:46.75ID:2YxKeDPZ
唐突に0がどうとか言い出すのはセンス無いわ
798デフォルトの名無しさん
2022/02/06(日) 09:07:44.45ID:HE5J2RYG
初めて知った
799デフォルトの名無しさん
2022/02/06(日) 09:24:54.74ID:usxBX4wT
>>797
>>786
800デフォルトの名無しさん
2022/02/06(日) 09:35:58.81ID:qvD4QsX7
馬鹿は当たり前のように英語も読めない
801デフォルトの名無しさん
2022/02/06(日) 09:36:22.76ID:vWDceL4H
なんじゃそりゃ>>799はC++規格委員会が死ね言うたら死ぬんか、
802デフォルトの名無しさん
2022/02/06(日) 09:57:50.12ID:vWDceL4H
規格書にはなんでそうなっているのか(置換されずに残ったFOOをエラーではなく0にするのか)の理由が書かれていないが
#ifdef defined(FOO) && FOO
として現れる論理式「defined(FOO) && FOO」の解釈を簡単にやりたい(FOOが未定義の場合でも通常の式の解釈ルーチンで処理したい
的なしょーもない理由だったりして……
803デフォルトの名無しさん
2022/02/06(日) 09:59:13.49ID:vWDceL4H
まつがえたorz
×: #ifdef defined(FOO) && FOO
○: #if defined(FOO) && FOO
804デフォルトの名無しさん
2022/02/06(日) 10:11:26.46ID:usxBX4wT
>>801
唐突じゃないことを示したまで
事実関係をよく確認してからセンス無いとかドヤれってこと
805デフォルトの名無しさん
2022/02/06(日) 10:16:43.48ID:a0g451d/
理由はたぶん、規格化以前に存在した実装の動作を規格違反とするのはマズいとか、
その動作に依存して #if FOO としてる既存ソースをエラーとするわけにはいかなかったとか、
そんなところだろうと思う。

マズい動作として検出したければ警告は出せるんだし。
806デフォルトの名無しさん
2022/02/06(日) 11:57:03.48ID:qvD4QsX7
馬鹿がまだ騒いでるのか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
$
807はちみつ餃子 ◆8X2XSCHEME
2022/02/06(日) 12:12:45.00ID:u7K67HUJ
残った識別子を 0 に解釈する挙動は C89 からの仕様だから C89 の Rationale (根拠) を見たんだけど直接的な言及は見つからない。
https://docs.google.com/viewer?a=v&;pid=explorer&chrome=true&srcid=0BxVCLS4f8Sg5NWZmM2NjZWEtYmExMS00Y2EzLWE3ZTMtNzFmYjYwYzBiOTIw&hl=en_US
ただ、既存のコードに差し障りがないようにということは明記してある (3.8.3) ので、
その時点でそういう挙動が支配的 (かつそれに依存するコードが多かった) のだろうとは察せられる。

規格ってのは統一を図るってのが第一の目的だけど無理な仕様でまとめちゃうと誰もその規格に従わないだけなんで、
現実にそれでやっているってのも (たとえ不格好でも) 十分な理由になるんだよ。
808デフォルトの名無しさん
2022/02/06(日) 12:26:28.98ID:qvD4QsX7
そう書かれると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
809デフォルトの名無しさん
2022/02/06(日) 12:53:10.29ID:FF40fIFl
CとC++の規格は既存コードへの忖度の塊で出来てるからな
万人の敵だったgets()を削除するのにどんだけ苦労してるのやら
810デフォルトの名無しさん
2022/02/06(日) 13:16:26.39ID:vWDceL4H
>>806>>808
スレに乗っかったつもりにしては
#if f

#endif
というのが含まれて無いようだが?
811デフォルトの名無しさん
2022/02/06(日) 13:22:45.35ID:vWDceL4H
>>807
C++規格委員会は無罪なのかもしれんがじゃあなんでC89以前からそうで
そういう挙動が支配的になってしまう事態になってしまったのか、と考えると
やっぱプリプロセッサの最初の設計者がサボって
プリプロセッサ式の途中でのFOOの定義/未定義判定を
define(FOO)を導入する代わりに仕様の方を弄って簡単ハックしてしまったから
のでは……
812デフォルトの名無しさん
2022/02/06(日) 13:33:49.71ID:qvD4QsX7
コードを示しても馬鹿には伝わらない悲しみw
813デフォルトの名無しさん
2022/02/06(日) 13:37:12.22ID:vWDceL4H
>>812
天才にもわかるようにkwsk
814デフォルトの名無しさん
2022/02/06(日) 13:39:17.55ID:qvD4QsX7
天才は自力でなんとか出来るし、他人を信用しないことも多いから、基本的に質問とかする機会がない
アイデアレベルの話のみ
815デフォルトの名無しさん
2022/02/06(日) 14:11:31.07ID:Yc7Iwiyd
(σ゚ω゚)σゲッツ
stdioのバッファ使うヤツ殆ど失敗作
816デフォルトの名無しさん
2022/02/06(日) 14:22:31.03ID:yFNvdNoT
#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 とか書けとでも?
817デフォルトの名無しさん
2022/02/06(日) 15:06:24.27ID:qvD4QsX7
俺のコードの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;
$
818デフォルトの名無しさん
2022/02/06(日) 16:46:37.28ID:XnD7OQcd
インクルードガード書くときも単に
#define FOO_HPP
とするのと
#define FOO_HPP 1
と1にするのがあるがどちらが良いとかあるんだろうか

後者の方がconstexpr if文などのC++の言語機能と組み合わせて使えるというメリットがありそうだが
819デフォルトの名無しさん
2022/02/06(日) 16:54:43.06ID:W01LuusE
今から新規に書くなら #pragma once 一択
820はちみつ餃子 ◆8X2XSCHEME
2022/02/06(日) 17:09:14.27ID:u7K67HUJ
>>818
私自身は前者にしてる。
インクルードしたことを示すためのフラグとしてのマクロが必要なら
(そういう事例に遭遇したことはないが) ガード用とは別にマクロ定義すると思う。

ガードのために定義したものをガード以外の目的で使うというのがちょっと汚く感じるから。
だけど分けちゃうと管理が二重になるのが嫌だと思う人もいるだろうし、
思想によるんじゃないの。

私は規格厨なので #pragma once は使わない。
まあ gcc と clang と msvc で使えるから事実上は問題にならないけど。
821デフォルトの名無しさん
2022/02/06(日) 17:25:15.43ID:XnD7OQcd
>>820
ありがとう
納得できる理由です

インクルードガード以外のフラグも同様にしてますか?
標準のNDEBUGのように
822はちみつ餃子 ◆8X2XSCHEME
2022/02/06(日) 17:46:04.51ID:u7K67HUJ
>>821
NDEBUG は「デバッグモードとそうでないモードを切り替える」というのがその用途なので
それに沿うと思ったら分けずに NDEBUG を使うことはあるよ。
でも「NDEBUG の用途は assert の有効・無効の切り替えなので他に使うべきでない」と認識している人がいてもおかしくない。

規格に書いてあるのはこの場合はこうだという規則だけなので
抽象的な部分での意味の捉え方は人によってかなり幅がある。
そのあたりは文脈を察して常識的判断でやっていくしかないし、
チームでやってるなら話し合うしかしょうがない。

このへんはそんなにスッパリと判断基準を設けられるようなもんではないと思う。
823デフォルトの名無しさん
2022/02/06(日) 19:09:51.99ID:qvD4QsX7
MS発祥のモノが嫌われてるだけとも思うw
824デフォルトの名無しさん
2022/02/06(日) 19:46:48.16ID:XnD7OQcd
>>822
質問の意図がわかりにくくてすみません
自前でフラグ書くなら
>>818の前者と後者どちらを使うのかが知りたかった
825はちみつ餃子 ◆8X2XSCHEME
2022/02/06(日) 20:08:36.06ID:u7K67HUJ
>>824
基本的には前者。
フラグとしてのマクロで分岐するときは #if よりも #ifdef (または defined) を使うようにしてる。
マクロは型を付けられないからそうすることで ON/OFF のどちらかであって内容に意味はない
ことを明示してる感じを出したいと思ってる。
826デフォルトの名無しさん
2022/02/06(日) 20:55:43.12ID:XnD7OQcd
>>825
改めての回答ありがとうございます

こういう一見どちらでも良いものであっても裏の考えや意図が聞けて面白かったです
827デフォルトの名無しさん
2022/02/07(月) 06:01:51.26ID:a2THiWt1
#pragma onceを標準に採用すればええのに
これだけ需要あるのに長年ずっと放置状態
何がそんなに問題なんだろう
828はちみつ餃子 ◆8X2XSCHEME
2022/02/07(月) 09:54:39.71ID:T4nofIq4
現行仕様での理屈の立て方としては #include の効果でコードに一体化してから内容の解釈が始まるので
インクルードに干渉する余地がない。
現実にやってるんだから出来るのは間違いないんだけど理屈を根本から変えることになるし、
モジュールが上手くいけばどうでもよくなることに手間をかけたくないんじゃないかな。
829デフォルトの名無しさん
2022/02/07(月) 11:19:39.20ID:3u4X3WRg
シンボリックリンクで別のパスになってたりとか、同じ内容の別ファイルとか、ファイル名違う中身同じファイルとか、日付だけ違う別ディレクトリの同じ内容のファイルとか
そんなの考えたくないよなーw
830はちみつ餃子 ◆8X2XSCHEME
2022/02/07(月) 11:53:54.22ID:T4nofIq4
名前と実体をどう対応付けるかは今でも処理系定義なのでそこらへんはあまり問題にならないと思う。
831デフォルトの名無しさん
2022/02/07(月) 11:56:53.41ID:XrnUHtPA
そこで#pragma onceはヘッダファイルそのものをインクルード済とみなすのではなくて
定義されている内容を定義済みと記憶するのが妥当な動作
なんだけど以下のような場合に困るという、
"a.h"
struct Foo {

"b.h"
  int m_x;
  double m_y;
};

"c.cpp"
#include "a.h"
#include "b.h"

やっぱモジュールにしたら同じような実装で完全な解決になるのだから待った方が、
832デフォルトの名無しさん
2022/02/07(月) 12:22:03.46ID:XrnUHtPA
現行の
#ifdef _FOO_H_
#define _FOO_H_
....
#endif
はヘッダファイルをインクルード済みか否かではなく
マクロ_FOO_H_が定義済みか否かを問題にしているのである意味モジュールに近い
#pragma onceは現行のマイクロソフトのやつはヘッダファイルをインクルード済みか否かを問題にしているので
何をもって同一のヘッダファイルとみなすのかという解釈の揺らぎの影響を受けてしまうまインクルードの挙動が、
833デフォルトの名無しさん
2022/02/07(月) 12:25:19.77ID:3u4X3WRg
>>830
だからどう転ぼうと中身で決められる昔ながらの方法の方が結果が明確ということw

ちなみにgccは
シンボリックリンク→ガード
同じ内容・日付・名前、別ディレクトリの別ファイル→ガード
同じ内容・名前、別日付、ディレクトリの別ファイル→インクルード
同じ内容・日付、別名前、ディレクトリの別ファイル→インクルード
みたい
834デフォルトの名無しさん
2022/02/07(月) 12:42:43.58ID:OoGLA1C8
MSの手抜き仕様まで合わせる必要なし
835デフォルトの名無しさん
2022/02/07(月) 12:56:32.61ID:3qCWHTEM
でもCに代わってC++が広まったのはMSのおかげじゃん
836デフォルトの名無しさん
2022/02/07(月) 13:10:46.99ID:a2THiWt1
ビット数多めのハッシュにしとけば
例えば衝突確率340澗分の1とかにできるよな
837デフォルトの名無しさん
2022/02/09(水) 12:59:20.15ID:ioLTStxt
64bit osでポインタ型を4byteにするにはどうすればいいんですか?
8byteだとちょっと大きすぎる気がします
838デフォルトの名無しさん
2022/02/09(水) 13:03:37.90ID:IwR5waiE
なぜ大きすぎると思ったのかが分からないが、64bitのアドレス空間を表すのに8 byteは必要だよ
839デフォルトの名無しさん
2022/02/09(水) 13:08:06.15ID:PzVUb2uc
>>837
貧乏くさすぎ
840デフォルトの名無しさん
2022/02/09(水) 13:19:23.53ID:eAgudC7+
64bit WindowsOSなら32bitアプリにすればok
841デフォルトの名無しさん
2022/02/09(水) 13:40:55.45ID:ioLTStxt
例えば64bitの場合アドレスの上位4byteを一意に決めといて下位4byteを4byteの変数に格納しておくってやり方なんてはどうですか?
それで復元時には
(上位4byte << 32) & 下位4byteっていうふうに変換するってふうになると思うんですが
まず最初に上位4byteが一致した連続したメモリ領域から決まってメモリを確保するなんてことはできるのでしょうか?
842デフォルトの名無しさん
2022/02/09(水) 13:52:00.55ID:USCqmiY8
必要なメモリをvector<X>で確保しておいて32bit以下のindex値でアクセスすることにすれば?

ポインタのサイズが大きすぎるなんて理由でやる人はいないと思うけど
843デフォルトの名無しさん
2022/02/09(水) 13:52:47.57ID:E/6u1YW1
long long ago... タイニー、スモール、コンパクト、ミディアム、ラージ、ヒュージつーのがあってだな
844デフォルトの名無しさん
2022/02/09(水) 14:26:32.14ID:ioLTStxt
>>842
そうすることにします
ありがとうございました
845デフォルトの名無しさん
2022/02/09(水) 14:34:15.15ID:PzVUb2uc
関数ポインタかなんかが8バイトに収まってなくて混乱したことがあったっけ
846デフォルトの名無しさん
2022/02/09(水) 14:37:12.22ID:Jq7h8mT9
昔は16bitポインタと32bitポインタをLPとPで使い分けてたって戦争で死んだおじいちゃんに聞いた
847デフォルトの名無しさん
2022/02/09(水) 17:17:57.87ID:SS+/CtsS
segment:offset時代か・・・
848デフォルトの名無しさん
2022/02/09(水) 18:17:45.02ID:t2vkJvVR
アセンブラの相対ショートジャンプは8ビット
849デフォルトの名無しさん
2022/02/09(水) 22:34:51.11ID:9agulkW+
ウィンドーズならINT_PTR使っとけばおkオール無問題
C++の標準規格でどうなっているのかわ知らん
850はちみつ餃子 ◆8X2XSCHEME
2022/02/09(水) 23:19:57.51ID:9Cj+df9g
規格上は std::intptr_t というものがある。
ただし関数ポインタやメンバ関数ポインタを格納できるとは限らない。
また、省略可能 (optional) であると明記されているので無くても規格準拠たりうる。

関数ポインタ同士 (メンバ関数ポインタは含まない) はお互いに変換可能であり
元の型にキャストしたら元の値と等しくなることは保証されるので
任意の型の関数ポインタを格納したいのであれば void* や intptr_t を使うよりは
適当な型の関数ポインタに入れるほうが規格に沿う。

メンバ関数ポインタは型通りに扱う以外はほとんど何の保証もないのだけれど
無理に変換して扱いたい場合も特に思いつかないのでどうでもいい。
851デフォルトの名無しさん
2022/02/10(木) 02:00:13.27ID:vaE+JZMI
>>843
far/near を直接指定すれはすむ話、メモリモデルなんてどうでもいい
852デフォルトの名無しさん
2022/02/10(木) 19:32:52.48ID:OsDlZl05
effective C++って現行のC++と比べてどのあたりが古いんですか?
代表的なところとかだけでも教えてくれると嬉しいです
853デフォルトの名無しさん
2022/02/10(木) 19:38:59.22ID:NUzD8R/O
全て
854デフォルトの名無しさん
2022/02/10(木) 20:00:39.81ID:qtJUe0L+
出版1998年やんけ
こんなもん使うぐらいならC言語やった方がマシなレベル
855デフォルトの名無しさん
2022/02/10(木) 20:11:39.77ID:OsDlZl05
>>854
一応第3版は原書が2005年に書かれています…
856デフォルトの名無しさん
2022/02/10(木) 20:20:25.92ID:ZkLGowhi
続編のeffective modern c++も古いけど、
こっちは隕石落下後の本だから読んでおいたほうがいいよ
857デフォルトの名無しさん
2022/02/10(木) 21:18:10.31ID:OsDlZl05
隕石落下後ってなんすか?
あとC++の勉強するならこの本読め、みたいなのって他にもありますか?
858デフォルトの名無しさん
2022/02/10(木) 21:38:32.90ID:ty8Wss5J
2005年でも古いなあ
C++98, 03, 11(0x), 14, 17, 20 と5回バージョンアップあるし
そのたびに標準ライブラリが更新されてる

古い本で古い書き方しか知らないと慣れてきたころにイラつくことになるから最低でもC++11対応のやつがいい
859デフォルトの名無しさん
2022/02/10(木) 21:44:00.87ID:Qcxer4Pv
今更auto_ptr使うなとか言われても何の役にも立たないからな
860デフォルトの名無しさん
2022/02/10(木) 23:48:22.57ID:jkDJeeU1
べつに使ってもいいんだよ
使い方さえ間違えなければ
861デフォルトの名無しさん
2022/02/11(金) 00:26:40.18ID:3fYQCkDW
使うことが間違いでは?
862デフォルトの名無しさん
2022/02/11(金) 04:33:24.42ID:ajov4Ad8
左辺値参照で無理やりムーブ作ったやつね
863デフォルトの名無しさん
2022/02/11(金) 06:13:41.97ID:ycfpInN1
仕様のバージョンは普通自分で選ぶもんじゃないので、古いことを知るのだって意味はある
逆にどの辺が古い、というのが分かってもあまり意味ない
864デフォルトの名無しさん
2022/02/13(日) 06:29:47.80ID:DI/GcuLa
いろんな範囲で一様乱数を次々と生成したいときってどうしますか?
uniform_int_distribution の範囲を次々と param で変える?
あるいは、妥協して剰余をとる形で範囲を変える?
865デフォルトの名無しさん
2022/02/13(日) 06:32:11.91ID:DI/GcuLa
あるいは、uniform_int_distribution を次々と生成して使い捨てる?

実測するべきなんでしょうが、どれがオーバーヘッドが少ないかというカンがありません
866デフォルトの名無しさん
2022/02/13(日) 06:51:44.09ID:rfXE6dHR
色々手はあるね
「いろんな範囲」の個数が決まっているならuniform_int_distributionの配列にするもよし
ランダムならparamもよし

次々と生成して使い捨て、つまりコンストラクタとデストラクタを都度実行するのは
俺はあんまりやりたくないが止めもしない
867デフォルトの名無しさん
2022/02/13(日) 07:21:47.95ID:JnTPIF3C
>>865
同じ範囲を何回も使うならその分distributionを用意する、そうでないならparamを変えていくのが良さそうに思います。が、たぶん実行時の差はほぼ無いです。
いちおう関数の定数を書き換えていくかメモリ上に予めたくさん用意するかの違いとして判断しました。
計算重いのは大抵は乱数生成の方だと思うので、速くしたいならそっちをとりかえたほうがいいと思います。
868デフォルトの名無しさん
2022/02/13(日) 07:48:28.31ID:rfXE6dHR
メルセンヌツイスターの売りの1つが速度がそんなに遅くない点だね
869デフォルトの名無しさん
2022/02/13(日) 10:06:40.11ID:+NRIy/Ul
なんで剰余を取るのが妥協なん?
870デフォルトの名無しさん
2022/02/13(日) 10:33:38.50ID:SeV3jiEK
一様性が一般に崩れるから
871デフォルトの名無しさん
2022/02/13(日) 10:37:30.83ID:SeV3jiEK
個人的にはこうやってみたりしてゐる、

/// 閉区間[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();
//printf("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;
}
872デフォルトの名無しさん
2022/02/13(日) 10:52:20.14ID:cIrOgCom
標準ライブラリ使わんの?
873はちみつ餃子 ◆8X2XSCHEME
2022/02/13(日) 11:12:52.07ID:nD0XyBZB
>>869
分かり易い例として 0 から 9 の一様な乱数列を生成するものを考えてみればいい。
このとき 0 から 7 の値が必要だからといって 8 の余剰を取ったらどうなる?
8, 9 が 0, 1 になるから 0 と 1 の出現確率が他の倍になってしまうだろ。

生成される値の幅が必要な値の幅よりも十分に大きいなら
許容可能な誤差として無視できる場合も多いとは思うが
様々なパラメータが有りうる状況では検証しづらい。
874はちみつ餃子 ◆8X2XSCHEME
2022/02/13(日) 11:15:35.52ID:nD0XyBZB
>>872
呼出しのたびに必要な範囲が違うような Distribution が標準に無いという文脈
875ハノン ◆QZaw55cn4c
2022/02/13(日) 12:39:58.09ID:1UprWsoO
>>873
それもあるけれども、昔の擬似乱数列は絶望的なまでに下位桁がランダムではない、という事情をひきずっているのでは?まあ MT はそうじゃないけどね
876デフォルトの名無しさん
2022/02/13(日) 13:09:41.79ID:+NRIy/Ul
>>873
そらもちろん、元がそんな狭い範囲ならだめでしょ
あとまあ昔のrand的には割ってかけるのが正しいというのはあるけどそれは別の話で
877デフォルトの名無しさん
2022/02/13(日) 13:37:58.02ID:PyRRUUG6
C++何の関係もない話で草
検証が必要ならすればいいだけ
要件すら不明で何もしてないのに質問するやつが馬鹿
878はちみつ餃子 ◆8X2XSCHEME
2022/02/13(日) 14:27:27.60ID:nD0XyBZB
>>876
> 元がそんな狭い範囲ならだめでしょ

逆に欲しい範囲が大きい場合でも同様。
この場合は様々な範囲が有りうるという想定なので、都合の悪い状況も考慮する必要がある。
879デフォルトの名無しさん
2022/02/13(日) 15:14:31.28ID:GfZrXG+U
任意の区間の乱数って、どうせはみ出した分をちょん切るんでしょ?
880はちみつ餃子 ◆8X2XSCHEME
2022/02/13(日) 15:18:24.06ID:nD0XyBZB
せやで。
881デフォルトの名無しさん
2022/02/13(日) 15:25:43.89ID:CS3pmCmc
そんな短い周期の疑似乱数使ってないんじゃない?
端っこは気にしないと思うなあ
882デフォルトの名無しさん
2022/02/13(日) 16:00:39.64ID:yoBtg/nD
>>876
> そらもちろん、元がそんな狭い範囲ならだめでしょ
「分かり易い例」って書いてあるのも理解できないの?
883デフォルトの名無しさん
2022/02/13(日) 16:06:17.09ID:CS3pmCmc
一般論でいうと周期に余裕がない様な疑似乱数使うのが間違いなんだと思うけどね
884デフォルトの名無しさん
2022/02/13(日) 16:19:57.08ID:kSk9XozZ
そういうのを乱数知識ない奴が触らずに済むようにパッケージにしたのが<random>のdistributionなんだから素直に頼っとけよ
885デフォルトの名無しさん
2022/02/13(日) 16:42:35.21ID:JnTPIF3C
周期と値域は別では
886デフォルトの名無しさん
2022/02/13(日) 16:56:02.36ID:KditTIA5
>>885
内部的にはおおむね同じです
887はちみつ餃子 ◆8X2XSCHEME
2022/02/13(日) 17:04:20.08ID:nD0XyBZB
線形合同法とかなら値の範囲と周期が一致することもあるが、乱数の一般的性質というわけではない。
888デフォルトの名無しさん
2022/02/13(日) 17:59:20.78ID:av/6iEu7
周期と値域は別だろ
たとえばマイナス一億と、プラス一億の2値をとる乱数とか
889デフォルトの名無しさん
2022/02/13(日) 18:15:27.44ID:AOBvb97v
疑似乱数なんて今の値で次の値が決まるんだから周期も値も同じだろう
その値の一部を使ったらまあ見た目は減るだろうけど
890デフォルトの名無しさん
2022/02/13(日) 18:32:37.88ID:3OIdnfKh
値域: 出力される値の範囲
周期: そのまんま乱数の出力が1周するステップ数

内部状態かなんかとごちゃ混ぜになってない?
891はちみつ餃子 ◆8X2XSCHEME
2022/02/13(日) 18:34:40.46ID:nD0XyBZB
>>889
内部状態と結果を分離する方式だって当然あるよ。
メルセンヌツイスタのどでかい内部状態を毎回値として利用するわけないし、
乱数として利用できる性質になってない。
892デフォルトの名無しさん
2022/02/13(日) 18:34:49.25ID:AOBvb97v
さすがにマジの最大値と最小値なんて誰も問題にしとらんやろ
893デフォルトの名無しさん
2022/02/13(日) 18:38:19.35ID:mUIDTArd
>>892
その思い込みで「値域」と「内部状態の大きさ」をごっちゃにしてるから話がこじれてたんでしょ。
区別して。
894デフォルトの名無しさん
2022/02/13(日) 18:55:00.53ID:RJAwRgrO
端っこにゴミがあるよりは歯抜けが散らばってる方がいいというのは一理あるね
895デフォルトの名無しさん
2022/02/14(月) 10:33:59.04ID:14KvXXq2
メンバー関数をテンプレートに出来たりしませんかね?

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 ホゲホゲって感じですが
896デフォルトの名無しさん
2022/02/14(月) 10:38:23.09ID:14KvXXq2
書き込んでから思いつきましたが直接やらずに
struct Caller1{void operator()(Sample& sample, int i){sample.func1(int i);}};
...
みたいなのを挟むべきですかねぇ
897デフォルトの名無しさん
2022/02/14(月) 10:52:52.11ID:Z549+Tcq
structの{}内にテンプレートの文全部入れてみ?
898デフォルトの名無しさん
2022/02/14(月) 11:13:25.35ID:o9A3FVGP
毎回 uniform_int_distribution のインスタンスを一時的に生成しては破壊するのを繰り返すのだけはありえんだろ
無意味なメモリのアロケーションありすぎ
899デフォルトの名無しさん
2022/02/14(月) 11:16:30.38ID:lu0CYRrt
#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;
}
900デフォルトの名無しさん
2022/02/14(月) 11:28:15.31ID:s3l2ZTMb
doubleとfloatの配列を同じように関数の引数に渡して扱う方法ってありますか?
・処理部が複雑なので引数の型が違う関数2個は作りたくない
・IF関数として両方版を作ってそこから処理部を呼び出すみたいな構造は可能、ただし別型版の実体コピー配列などは作りたくない(配列が巨大な為)

考えてみたのが、
配列の値部分をvoid*配列で指したものと、type_infoを持ったクラスなり構造体なりを用意して、
処理部でtype_infoに応じてvoid*をキャスティング、という方法ですが、
どうにも汚いのでもっと綺麗なやり方あれば教えてください。
901デフォルトの名無しさん
2022/02/14(月) 11:34:29.03ID:lu0CYRrt
コードがないので0点
902デフォルトの名無しさん
2022/02/14(月) 11:51:48.64ID:MNwZvUCy
テンプレートでいいだろ
903デフォルトの名無しさん
2022/02/14(月) 11:54:11.63ID:L8LvhIeL
>>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)) { }
}
904デフォルトの名無しさん
2022/02/14(月) 11:57:58.78ID:81yRYH7R
>>900
template<typename T, size_t size>
void f(T(&a)[size]){
}
905デフォルトの名無しさん
2022/02/14(月) 12:04:39.18ID:Z549+Tcq
>>903に便乗してC++20で以下のような書き方も
#include <concept>
template<std::floating_point T>
void func(T && a){}
906デフォルトの名無しさん
2022/02/14(月) 12:12:47.83ID:L8LvhIeL
>>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);
こんな基本はわかるんだよな?
907デフォルトの名無しさん
2022/02/14(月) 13:46:37.17ID:nlxkZZlr
>>899
ありがとう、採用します 895
908デフォルトの名無しさん
2022/02/14(月) 14:17:59.24ID:s3l2ZTMb
ありがとうございます、テンプレート便利ですね。使わせていただきます。900
909デフォルトの名無しさん
2022/02/14(月) 14:33:14.26ID:HFyH6Ayv
あるクラスのメンバ関数のデフォルト引数を同クラスのメンバ変数にすることって可能でしょうか
910デフォルトの名無しさん
2022/02/14(月) 14:51:26.37ID:lu0CYRrt
可能
911はちみつ餃子 ◆8X2XSCHEME
2022/02/14(月) 14:51:35.72ID:eI8f6/6+
もっとわかりやすく説明して……。
912はちみつ餃子 ◆8X2XSCHEME
2022/02/14(月) 14:55:09.41ID:eI8f6/6+
デフォルト引数をデータメンバにするってのは単にデフォルト引数の値をデータメンバに入れるって意味?
↓ こういうの?

struct foo {
int x;
void bar(int y=1) {
x=y;
}
};

こんな単純なことがわからないとも思えんし、なんか隠れた要件がありそうな気がするんやが
913デフォルトの名無しさん
2022/02/14(月) 15:03:33.70ID:JdXPqUHi
>>912
逆だろ文網
914デフォルトの名無しさん
2022/02/14(月) 15:13:09.50ID:9KgBPGkB
>>912
こいつJ民だったの?
915デフォルトの名無しさん
2022/02/14(月) 15:13:51.43ID:M1yCctPq
たぶん
struct S{
int field;
void f(int x=field){...}
};
ってのをやりたいんだろうけどな

あいにくC++のデフォルト引数は関数定義を見ただけで定数に決まるものしか受け付けられない

どうしても同等の処理をしたいならオーバーロードして転送するのが一番楽
void f(){f(field);}
916デフォルトの名無しさん
2022/02/14(月) 15:17:25.95ID:L8LvhIeL
> デフォルト引数は関数定義を見ただけで定数に決まるものしか受け付けられない

そうか?
int func()
{
int a;
std::cin >> a; //絶対に定数になり得ない
return a;
}

void test(int arg = func())
{
}

int main()
{
test(); //OK. もちろん入力待ちをする
}
917はちみつ餃子 ◆8X2XSCHEME
2022/02/14(月) 15:21:08.20ID:eI8f6/6+
>>915
デフォルト引数は関数を呼び出すときに補われたかのように動作する。
関数呼出しのたびに評価されるよ。
918デフォルトの名無しさん
2022/02/14(月) 15:33:51.02ID:lu0CYRrt
コードがないし状況不明で困ってる文面にも見えないからアレで十分
919デフォルトの名無しさん
2022/02/14(月) 17:52:44.50ID:m3z01MvF
uniform_int_distributionって本質はIntTypeのペアを持った関数オブジェクトだから毎回生成したところで遅くはないはず
920デフォルトの名無しさん
2022/02/14(月) 20:03:27.39ID:vE8mmwyH
乱数ってだいたい静的になんか持ってるよね
921デフォルトの名無しさん
2022/02/14(月) 20:44:52.17ID:UkhMLhRO
マルチスレッド環境用にジャンプって機能が疑似乱数にあるよな
「疑似乱数 ジャンプ」でぐぐると出てくる
922デフォルトの名無しさん
2022/02/14(月) 21:33:11.13ID:CqI2HZWm
状態持ってるのはエンジンの方
分布ごときにどんな怪獣ブラックボックスのイメージ持ってんだ
923デフォルトの名無しさん
2022/02/14(月) 21:37:34.26ID:zjXK/l5x
エンジン以外に何があんの?
924デフォルトの名無しさん
2022/02/14(月) 22:08:14.48ID:2E5iBc/D
例外処理で、catchした後、どのクラスがthrowしたのかってわかりますか?
925デフォルトの名無しさん
2022/02/14(月) 22:35:41.44ID:jOONNl+N
初心者質問ですみません。
ヘッダで定義したテンプレート特殊化の非推奨属性がヘッダ外で効いてないっぽいんですけど、
ヘッダ外でも非推奨としたい場合何か特殊な事をしないといけないとかありましたっけ?

例えば
.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; // これは非推奨じゃない
```
となっています。
MSVC++(v142)で言語標準準拠はstd:c++20です。
926はちみつ餃子 ◆8X2XSCHEME
2022/02/14(月) 22:41:31.68ID:eI8f6/6+
>>924
それ自体には発生元を特定する情報を持たないけど……。
どういう状況?

・ 例外的な状況から回復する必要があって発生源によって処理の切り替えが要る
・ プログラムの正常系が動くはずなのに何故か出てくる例外の元を特定したい (つまりデバッグ用途)

どちら?
927デフォルトの名無しさん
2022/02/14(月) 23:02:44.91ID:2E5iBc/D
>>926
大学でこういう課題を出されたのですが、全然いい方法がわからないです。
「あるクラスの例外だけをレポートするためにはどのような実装方法があるか」
928デフォルトの名無しさん
2022/02/14(月) 23:08:22.30ID:BDOt87Dq
>>927
ヒント。例外はクラス等なんでも投げられる。そしてクラスは継承できる。
929デフォルトの名無しさん
2022/02/14(月) 23:11:22.86ID:R5SapkSQ
それはどのクラスがthrowした、じゃなくて、どのクラスがthrowされた、の間違いだな

例外 c++で検索すれば答えはすぐ出てくるよ
930デフォルトの名無しさん
2022/02/14(月) 23:29:00.15ID:a+DIA8ij
>>916
>>917
嘘やんと思って試してみたらマジでいけるやんけ知らんかった

インスタンスフィールドまでは触れんかったが
931デフォルトの名無しさん
2022/02/15(火) 00:14:19.75ID:VnfLS+lO
>>928
なるほど。std::exceptionを継承した自作クラスを定義して、
それを投げるというこですね?
932蟻人間 ◆T6xkBnTXz7B0
2022/02/15(火) 00:23:09.85ID:vbEMbnXt
throw this;
933デフォルトの名無しさん
2022/02/15(火) 14:33:45.24ID:StNRh9X/
クラスメンバをforで回す方法はありますか?

例えばintのaとdoubleのbという2つのメンバを持つクラスがあったとして、
forループでクラス内のメンバ変数を全部加算したい、など。

イメージはこんな感じです。
double all = 0.0;
for (T member : this->allMember)
{
all += member;
}
934デフォルトの名無しさん
2022/02/15(火) 14:55:33.51ID:aaenmMxg
for で回さないといけないほど多数のメンバー変数がある設計をまず見直すべき
935デフォルトの名無しさん
2022/02/15(火) 14:59:14.95ID:0rNaChGh
リフレクションは無いというのが回答か
936デフォルトの名無しさん
2022/02/15(火) 15:15:26.06ID:AWN50YIA
動的にロードするのでなければ、自分で登録するか、ソースから解析するタイプのリフレクションライブラリを書くか探せばいい
937デフォルトの名無しさん
2022/02/15(火) 15:16:41.63ID:g9Gn9R1H
配列じゃあかんのか
938デフォルトの名無しさん
2022/02/15(火) 15:22:08.66ID:3zKYAjvH
数学のベクトルクラスでも作成してるのかい?
939デフォルトの名無しさん
2022/02/15(火) 17:13:44.36ID:QbgtcDS7
>>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
940デフォルトの名無しさん
2022/02/15(火) 17:28:44.20ID:AWN50YIA
じゃあこれもオススメではないがリフレクションベースで
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
941デフォルトの名無しさん
2022/02/15(火) 17:31:44.80ID:AWN50YIA
ちょっと修正
#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;
}
942デフォルトの名無しさん
2022/02/17(木) 18:59:32.62ID:bHlhY+TU
std::unique_ptr</*見切れる程長いクラス名*/> looongPtr{ std::make_unique</*見切れる程長いクラス名*/>(/*見切れる程多い引数*/) };
unique_ptrをメンバ変数にするときに最初のとこをautoに出来ないんですか?
943デフォルトの名無しさん
2022/02/17(木) 19:17:57.96ID:9tUnWmYs
make関数使えば?
944蟻人間 ◆T6xkBnTXz7B0
2022/02/17(木) 19:30:29.28ID:sNGWbyyl
typedef longlonglongtypename shorttypename;
auto ptr = std::make_unique<shorttypename>...
945デフォルトの名無しさん
2022/02/17(木) 20:09:06.95ID:TNf7BdQD
>>942
できないですね。
https://cor3ntin.github.io/posts/auto_nsdmi/#so-why-are-auto-nsdmi-not-in-the-standard
946デフォルトの名無しさん
2022/02/17(木) 20:26:37.89ID:wIu//gsc
>>942
設計を見直せ
947デフォルトの名無しさん
2022/02/17(木) 21:57:39.99ID:d4bhbZak
単なる○○できますか?に対して設計見直せとだけ言ってくるガイジなんなん
まず質問に答えた上でなら分からんでもないが
948デフォルトの名無しさん
2022/02/17(木) 22:12:03.03ID:wIu//gsc
うるせぇ雑魚が
949デフォルトの名無しさん
2022/02/17(木) 23:04:10.74ID:wrwPyddf
ざーこざーこw
950デフォルトの名無しさん
2022/02/17(木) 23:56:12.71ID:bHlhY+TU
🤔
951デフォルトの名無しさん
2022/02/18(金) 00:20:49.11ID:q/M7jrOo
C++の業務ってことで入ったんだけどC++とは名ばかりのC言語バリバリのコードだった
C++11、いやせめてCじゃなくてC++を書こうとしようぜと思うんだけど世の中こんなんばっかなん?こういうケースほんっとに多くてさぁ
40代↑の人が書いてるC++の言語って大体ほぼCでうんざりする
952デフォルトの名無しさん
2022/02/18(金) 00:25:14.77ID:qZSzRw8s
偏見だけど同名の関数が並んでる以外Cとしてコンパイルできそうなイメージある
953はちみつ餃子 ◆8X2XSCHEME
2022/02/18(金) 00:25:30.70ID:fowo2HBL
>>951
なんでそんなことになるんだろうな?
コンパイラを信用してないからか?
ワイは40代以上やけど C++ を使える状況であえて C 的なスタイルで書く気はしないわ。
だって単純に面倒くさいもの。
954デフォルトの名無しさん
2022/02/18(金) 00:26:19.39ID:VWFgwWIW
で、相談は?
955デフォルトの名無しさん
2022/02/18(金) 01:20:21.17ID:x3azmRP7
Cの文法が覚えられる限界なんでしょうな
956デフォルトの名無しさん
2022/02/18(金) 02:48:20.56ID:y/CjghL0
人事部の人がCとC++の見分けがつかなくて
会計上コンパイラ代に「C++」と書いてあったから
C++で募集かけてたんじゃね?
957ハノン ◆QZaw55cn4c
2022/02/18(金) 03:23:56.08ID:AKyBDynF
>>953
C++で通らないCは書きたくない、とは思いますね
958デフォルトの名無しさん
2022/02/18(金) 13:34:17.22ID:NqXxszTV
>>951 ←こういう初心者にじゃあすべて作り直していいよ、と言うと何もできない。

無職の妄想からは何も生まれないのだよ。
959デフォルトの名無しさん
2022/02/18(金) 14:23:13.29ID:y/CjghL0
自分は何かできるとでも言いたげだな
すべて作り直すということがどのくらいの工数かわかってないんだろ
960デフォルトの名無しさん
2022/02/18(金) 15:06:16.89ID:tL/18rdC
>>958
俺もそう思う

現場の不平不満ばかりの意識高い系エンジニアさん多いよね
その現場を改善するわけでもなく文句いうだけ
高いスキルあるならそんな現場やめれば?
単価150万超えるようなとこなら周りにも高スキルな人がたくさんいるよ?

現場の文句言うだけの奴は結局その現場がお似合いのレベルなんだよ、っていつも思ってる
961デフォルトの名無しさん
2022/02/18(金) 15:32:05.24ID:dD/fDJ+w
>>951
普通の職場ならコーディングスタンダードあるから勝手はできないだろ。

コーダーとライブラリアンで許可されている範囲も違うだろうし。
962デフォルトの名無しさん
2022/02/18(金) 15:57:07.65ID:NqXxszTV
>>955
無職が言いそうなことだ。無能なブロジェクトリーダーはCプロジェクトをあっさりとC++化できる、
存在しないスーパープログラマを探し続けるがそんな奴はどこにもいない。
そんなスーパーPGがいたらATMはバグで止まらない。C++書ける奴はCをバカにしないよ。
963デフォルトの名無しさん
2022/02/18(金) 16:33:00.65ID:xb2lszF9
バグ出たまま放置してるヤツはバカにするけど
964デフォルトの名無しさん
2022/02/18(金) 17:01:46.61ID:1bc1nI/9
正当な理由もなくスマポやSTLを嫌がった結果
生ポインタをガチャガチャいじくり回したスパゲティコード書いて
それが遅くて非効率でバグまみれリークだらけというのは非常によくあるけど
そういうCプログラマ様も敬わなきゃダメ?
965デフォルトの名無しさん
2022/02/18(金) 17:04:32.95ID:y/CjghL0
バイアス満載だな
落ち着けよw
966デフォルトの名無しさん
2022/02/18(金) 17:19:05.78ID:xb2lszF9
そういうどうしょうもないのはヒソカに心の奥でバカにしていいし反面教示にすべし
967デフォルトの名無しさん
2022/02/18(金) 18:15:33.32ID:jeS+/hUn
マ板かここ?
968デフォルトの名無しさん
2022/02/18(金) 20:06:32.33ID:z2RoOtDN
80対20の法則は大事だし、動くコードを作ってから最適化をした方がいいって偉い人も言ってた気がする

リソース管理はとりあえずスマポを使うのが吉だと思ってます
969デフォルトの名無しさん
2022/02/18(金) 20:12:42.95ID:N0FOn5a0
自分で責任もって結合テストする覚悟があるんならいくらでもCからC++に置き換えていいと思うよ
970デフォルトの名無しさん
2022/02/18(金) 20:34:30.32ID:y/CjghL0
とテストの基本がわかってないやつが言う
C++に動的な型宣言はないからな
971デフォルトの名無しさん
2022/02/18(金) 20:38:01.63ID:NqXxszTV
効率ガーと言うが、CをC++に書き換えて高速化、省メモリ化するなんてむしろレアケース。
972デフォルトの名無しさん
2022/02/18(金) 20:44:21.03ID:y/CjghL0
C++の隠れたコードが何をしてるか解ってないやつが
C++にしたら高速化した低速化したって言語のせいにするんだよ
973デフォルトの名無しさん
2022/02/18(金) 21:35:17.98ID:UZsjZs7N
こういうとき悲しいのはね
CもC++もたいして知りもしねえド素人のアマチュアが
想像と思い込みでもっていろいろレスつけてくること
噴飯ものだぞ?
974デフォルトの名無しさん
2022/02/18(金) 23:03:13.88ID:k8EYArXJ
c++書いてたとき何ちゃらストリームやらのファイル操作遅すぎてムリすぎて結局fopen使ったような…
まあ便利は便利なんだけど利便さ求めるならそもそもpythonとかに逃げますし
C++17未満?だとfilesystem使えなくてこんな簡単なことも出来ないのかと絶望した気もする
975デフォルトの名無しさん
2022/02/18(金) 23:08:29.98ID:qZSzRw8s
std::endlがフラッシュ兼ねてるのを知らずに使うとクソ遅くなる
976デフォルトの名無しさん
2022/02/19(土) 00:57:04.84ID:kSnJ/KwP
初心者にC++は早い
C++は人類に対する挑戦
977デフォルトの名無しさん
2022/02/19(土) 01:05:13.77ID:Sb0QDKc0
みんな最初は初心者
978デフォルトの名無しさん
2022/02/19(土) 01:28:32.55ID:MLwzxLgZ
Appleのcopland、Googleのandroid、MSのEdgeの失敗を見れば
予算と開発期間が十分にあれば解決すると思ってるならそれは間違いだと理解するだろう。
生ポインタをこねくり回す程度で脳みそのキャパが越えてるようじゃC++使ってもまともな実装なんてできない。
隠れたコードも何もC、C++はアセンブラの知識は必須だ。バイナリを読めるようになってから文句言え。
979デフォルトの名無しさん
2022/02/19(土) 03:09:27.37ID:kSnJ/KwP
フムフムアセンブラが必須か…
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使わせるにはどうしたらいい?
980デフォルトの名無しさん
2022/02/19(土) 04:43:40.93ID:2+bZAOZm
valarray
981デフォルトの名無しさん
2022/02/19(土) 04:46:13.97ID:kSnJ/KwP
不正解
982デフォルトの名無しさん
2022/02/19(土) 06:01:38.84ID:2+bZAOZm
hoge側でどうSIMD使えって言いたいの?
inlineとかだったらしばくぞ
983デフォルトの名無しさん
2022/02/19(土) 06:20:48.76ID:ZqDn11YK
イントリンシック、でしょう?
984デフォルトの名無しさん
2022/02/19(土) 08:45:24.25ID:0ANF/iVA
Intelのコンパイラに任せ
985デフォルトの名無しさん
2022/02/19(土) 09:52:14.21ID:kSnJ/KwP
1024 -> 1024 * 16にすると...
986デフォルトの名無しさん
2022/02/19(土) 09:57:47.91ID:kSnJ/KwP
intrinsicは(inline)assemblerとほぼ同じなので、C#でしか使ったことないな
987デフォルトの名無しさん
2022/02/19(土) 10:03:29.25ID:mDQ0X8WX
アセンブラなどの理解は「低レイヤを知りたい人向けのCコンパイラ作成入門」が結構勉強になったんですが、バイナリは何で勉強すればいいですかね?
988デフォルトの名無しさん
2022/02/19(土) 10:34:54.00ID:0ANF/iVA
>>985
キャッシュメモリのアレで遅くなるやつか?
989デフォルトの名無しさん
2022/02/19(土) 10:44:00.07ID:kSnJ/KwP
さぁ?・・・callしたり判定用コードやサイズ計算とかオーバーヘッドがあるからじゃね?知らんw
990デフォルトの名無しさん
2022/02/19(土) 11:57:14.27ID:kSnJ/KwP
次スレ立ててきた
C++相談室 part159
http://2chb.net/r/tech/1645239402/
991デフォルトの名無しさん
2022/02/19(土) 12:08:36.38ID:2h4SA+VW
CADソフトCANDYの作者の発言。
>数年前に,私の会社で組み込み機器向けのプロジェクトで,C++コンパイラが安定して動かないので
>Cでプログラムを書くように私が指示したケースがあったのだが,
>何人かのエンジニアが「今さらCなんかでプログラムを書けませんよ。
>クラスを使えなければスパゲッティコードになってしまいます」と猛反対をしてきた。
■ 第4回 オブジェクト指向の本質
https://gihyo.jp/lifestyle/serial/01/software_is_beautiful/0004

別のインタビューと補完すると、そのときC++の標準ライブラリ的なブツを著者が
C言語でババーっと書いて仕事させたという話だったはず(記憶モード

ちょっどこの昭和カヨ?!
992デフォルトの名無しさん
2022/02/19(土) 12:18:20.98ID:kSnJ/KwP
組み込み機器用のCPUって特殊なんで、コンパイラが安定しないなんてよくある話
オブジェクト指向のメリットの本質についての話なので、可能/不可能が実装言語に依存しないというのもよくある話(楽かどうかは別)
別に昭和でも平成でも令和でも変わってないけど、>>991に伝わってないのは確か
993デフォルトの名無しさん
2022/02/19(土) 12:50:13.00ID:gFosEVVi
GTKのGObjectはCでオブジェクト指向を実現している訳だけど
(ただし学習コストが低いとは言えないと思う)
994デフォルトの名無しさん
2022/02/19(土) 12:53:15.56ID:2h4SA+VW
そんなん言ったらX Window SystemもC言語でオブジェクト指向しているらしい
らしい(伝聞
995デフォルトの名無しさん
2022/02/19(土) 13:05:47.37ID:x/upE6G9
当たり前だけどアセンブラでもオブジェクト指向はできるし還暦の爺さん(とは言ってもなかなかの人ではある)が10年以上前に書いた記事だしまじで何を言いたいのかよくわからん
996デフォルトの名無しさん
2022/02/19(土) 13:20:12.26ID:kSnJ/KwP
分からん分からん言うのは誰でも出来るし、どんな初心者でも何に対してもそう言える
なので、具体的に分からん部分を指摘できない人は初心者か、荒らしだと思ってる
997デフォルトの名無しさん
2022/02/19(土) 13:22:03.79ID:kSnJ/KwP
athenaくらいつかったことあるよね
998デフォルトの名無しさん
2022/02/19(土) 13:28:47.19ID:2h4SA+VW
>当たり前だけどアセンブラでもオブジェクト指向はできるし
ちょっカプセル化(シンボルの隠蔽)にやや手間がかかるし
オブジェクトをスタックにのコピーして返すのにもさらに手間がかかるし、
コンストラやデストラの呼び出しの保証や継承関係のチェックについて処理系のサポートが一切無いし、
やんけ;;;
そういうオブジェクト指向のプログラミングパラダイムにおいて裏で当然働くべき処理が
プログラマーが手間をかけ注意を振り向け続けないと実現されないというのはオブジェクト指向しているうちに入らないのでは……
999デフォルトの名無しさん
2022/02/19(土) 13:31:35.88ID:6TS2kFRN
brainfuckでもオブジェクト指向でプログラミングできるんやで
1000デフォルトの名無しさん
2022/02/19(土) 13:31:55.84ID:6TS2kFRN
>>1000なら次スレでちんこ貼る
-curl
lud20250124193840nca
このスレへの固定リンク: http://5chb.net/r/tech/1636969758/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C++相談室 part158 YouTube動画>1本 ->画像>3枚 」を見た人も見ています:
C++相談室 part154
C++相談室 part153
C++相談室 part152
C++相談室 part133
C++相談室 part137
自営業 悩みごと相談室 16
C#, C♯, C#相談室 Part93
自営業 悩みごと相談室 52
自営業 悩みごと相談室 48
自営業 悩みごと相談室 45
C#, C♯, C#相談室 Part95
アパート経営なんでも相談室【135号室】
【真剣相談】大阪市営住宅の浴室給湯器設置
シーバスなんでも相談室 17&#169;3ch.net
【ハゲ】髪の毛の悩み相談室 in DQO【彡⌒ミ】
アパートマンション経営なんでも相談室【152号室】
アパートマンション経営なんでも相談室【137号室】
アパートマンション経営なんでも相談室【150号室】
アパートマンション経営なんでも相談室【151号室】
【皇室】小室圭さん、「解決済み」声明文 宮内庁に事前相談なし
【皇室】眞子内親王殿下がお気持ち表明「結婚に向けて家族とも相談しながら進んでまいりたい」★9 [記憶たどり。★]
【名古屋】いじめ相談も「報復」恐れ学校側は直接指導せず…中1女子が下校後に自殺 2月から教室に行かず別室で授業 [ばーど★]
東京の梅毒感染者2400人超で過去最多ペースで増加…内訳は男性7割女性3割 無料・匿名の検査相談室を新宿や多摩地域に設置 ★2 [首都圏の虎★]
【ガルパン】マライ・メントラインの勝手にお悩み相談室「困っています。全力で『ガルパン』を推すために私は何を為すべきでしょう」 [鳥獣戯画★]
室井佑月「(日の丸マスク)謝罪し訂正したのだけど、お詫びしろ、という意見…。弁護士に相談…」 ネット「被害者面」「実害出てるけど? [Felis silvestris catus★]
荒らし相談室
エイブル相談室
不登校相談室5
ハゲミン相談室
船乗りなんでも相談室・10
川瀬いにみの人生相談室
シーバスなんでも相談室92
シーバスなんでも相談室85
シーバスなんでも相談室70
シーバスなんでも相談室62
精神障害者の人生相談室
シーバスなんでも相談室71
アダルトの何でも相談室
シーバスなんでも相談室36
シーバスなんでも相談室39
◎蟹座の子育て相談室◎
Dr林のこころと脳の相談室17
病巣院クルリのお悩み相談室
綾子88kg♪の恋愛何でも相談室★
必ず誰かがなんたら相談室 Part.3
苔 コケ 初心者なんでも相談室-4回目
明るい悩み相談室 [無断転載禁止]
初心者の為のボート相談室 Part1
レポ神のピンサロ相談室 ©bbspink.com
鍼灸マッサージ質問相談室パート11
鍼灸マッサージ質問相談室パート17
【本家】船乗りなんでも相談室 22【内航船】
鍼灸マッサージ質問相談室パート16
【本家】船乗り何でも相談室 20【本元】
【ノーワッチョイ】船乗りなんでも相談室 27【内航船】
初心者優先デジタル一眼質問・購入相談室 53
(・3・) ぼるじょあの卓上相談室(・3・)
08070507787 ★ 真智宇 先生の悩み相談室
【スノーボード】初級者なんでも相談室 ☆6
初心者優先デジタル一眼質問・購入相談室 157
初心者優先デジタル一眼質問・購入相談室 103
初心者優先デジタル一眼質問・購入相談室 109
初心者優先デジタル一眼質問・購入相談室 101
05:38:43 up 11 days, 6:42, 2 users, load average: 14.01, 12.48, 11.43

in 4.6062610149384 sec @2.9802708625793@0b7 on 012419