C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part146
https://mevius.5ch.net/test/read.cgi/tech/1573094136/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**
C++相談室 part147
■ このスレッドは過去ログ倉庫に格納されています
2019/12/18(水) 17:56:53.03ID:uFDqtnkl
712デフォルトの名無しさん
2020/01/26(日) 02:05:13.00ID:Y1EGWiT/ はちみつ餃子がでてくると、どうもこんな時間に腹が減ってきていかん
713はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 02:10:39.45ID:zFvDGbzt 食えばいいじゃん。
714デフォルトの名無しさん
2020/01/26(日) 05:01:35.24ID:3a27Zr8u >>674
gotoの使い方を知らないと大変だね
gotoの使い方を知らないと大変だね
715デフォルトの名無しさん
2020/01/26(日) 07:41:47.19ID:Yuet6lAk >>683
禿4を少しは見習っていただきたい。
禿4を少しは見習っていただきたい。
716デフォルトの名無しさん
2020/01/26(日) 10:01:19.30ID:aNHbuwn9717デフォルトの名無しさん
2020/01/26(日) 10:06:55.53ID:BKKks8j/ >>714
関数切り出しできないと大変だね。(特に周りの人たちが。)
関数切り出しできないと大変だね。(特に周りの人たちが。)
718デフォルトの名無しさん
2020/01/26(日) 10:47:19.67ID:VrR0aqw1719デフォルトの名無しさん
2020/01/26(日) 10:53:32.15ID:1VU+FMua >>716
えっ?
C#
えっ?
C#
720デフォルトの名無しさん
2020/01/26(日) 10:56:24.48ID:ZSyO84gV テンプレートメタプログラミングはC++らしいとも思うけど全然別の言語になっている気がしないでもない
>>705
情報ありがとうございます
::VirtualAlloc() 系は書いてあることが難しい上に、ばっちゃの遺言「::HeapAlloc() を使え」もあって敬遠していましたが、ここで教えてもらったのもなにかの縁だからデバッグ用に試行してみようと思います
win32api の criticalsection と signal でやっていた(何かがまずくてstarvationに悩まされていました)のも
C++11 になって pthread が大幅に規格に取り込まれた以上、
C++11 の上からの mutex・cond 派に切り替えようか、とか、C++11 になってスタイル変更を考え中です
情報ありがとうございます
::VirtualAlloc() 系は書いてあることが難しい上に、ばっちゃの遺言「::HeapAlloc() を使え」もあって敬遠していましたが、ここで教えてもらったのもなにかの縁だからデバッグ用に試行してみようと思います
win32api の criticalsection と signal でやっていた(何かがまずくてstarvationに悩まされていました)のも
C++11 になって pthread が大幅に規格に取り込まれた以上、
C++11 の上からの mutex・cond 派に切り替えようか、とか、C++11 になってスタイル変更を考え中です
722デフォルトの名無しさん
2020/01/26(日) 11:32:39.48ID:loc7kxiY >>701
マウント失敗乙
マウント失敗乙
723デフォルトの名無しさん
2020/01/26(日) 11:33:18.98ID:3yHBwxN6 >>717
ループを抜ける為に関数を分けるようなアホと一緒に組むと大変だ
ループを抜ける為に関数を分けるようなアホと一緒に組むと大変だ
724デフォルトの名無しさん
2020/01/26(日) 11:41:25.57ID:VrR0aqw1 確かに大変だね
if breakしてる複合文を関数にするときにreturnとか言い出すやつは
longjmpだろうがって
if breakしてる複合文を関数にするときにreturnとか言い出すやつは
longjmpだろうがって
725デフォルトの名無しさん
2020/01/26(日) 12:03:53.99ID:aNHbuwn9 >>720
実際、別言語だと思う。
C++はtemplateや演算子のオーバーライドを使えば、ほぼ別言語をみなせるようなものを上に載せられる設計になっているので。
STLを使いまくるプログラミングの書き方だと、もはやCとは何の関連性もなくなってしまっている。
実際、別言語だと思う。
C++はtemplateや演算子のオーバーライドを使えば、ほぼ別言語をみなせるようなものを上に載せられる設計になっているので。
STLを使いまくるプログラミングの書き方だと、もはやCとは何の関連性もなくなってしまっている。
726デフォルトの名無しさん
2020/01/26(日) 12:09:22.76ID:BKKks8j/727デフォルトの名無しさん
2020/01/26(日) 12:12:08.41ID:bvl7bZIP どんな苦労?
728デフォルトの名無しさん
2020/01/26(日) 12:13:10.43ID:Yuet6lAk ネストするなら別のプログラムに切り分けましょう。
シェルから呼び出せばいいのです。
シェルから呼び出せばいいのです。
729デフォルトの名無しさん
2020/01/26(日) 12:18:30.55ID:Scuijf7t730デフォルトの名無しさん
2020/01/26(日) 12:39:03.45ID:aRFw4TjA >>727
「gotoダメ!絶対!教」の戒律を破ることじゃないかな。きっと身を裂かれるほどの苦しみなんだろうw
「gotoダメ!絶対!教」の戒律を破ることじゃないかな。きっと身を裂かれるほどの苦しみなんだろうw
731デフォルトの名無しさん
2020/01/26(日) 12:50:28.18ID:PjjUDKm0 いったん収まったと思ったら
また goto の話開始してて草
アスペ特融の拘りと言われても仕方がないな
また goto の話開始してて草
アスペ特融の拘りと言われても仕方がないな
732デフォルトの名無しさん
2020/01/26(日) 13:01:54.18ID:Yuet6lAk goto以外の話題を提供できないお前が悪い。
733デフォルトの名無しさん
2020/01/26(日) 14:36:31.44ID:VrR0aqw1 gotoの話で叩きのめされたやつが話題を変えたいのはわかったよ(ニヤニヤ
734デフォルトの名無しさん
2020/01/26(日) 17:07:41.56ID:aNHbuwn9 >>729
たしかにCもマクロを使えば結構何でも出来る。
だが、マクロを多用すると分かりにくくなるとも言われていたし、使い方によっては、ソースコードが全く別言語のようになってしまうことも知られていた。
それと同様の現象がSTLにおいては起きる事態になってしまっている。
たしかにCもマクロを使えば結構何でも出来る。
だが、マクロを多用すると分かりにくくなるとも言われていたし、使い方によっては、ソースコードが全く別言語のようになってしまうことも知られていた。
それと同様の現象がSTLにおいては起きる事態になってしまっている。
735デフォルトの名無しさん
2020/01/26(日) 17:09:16.11ID:jQnb27FW もっとマクロをリッチにしてほしい
736デフォルトの名無しさん
2020/01/26(日) 17:19:16.84ID:VrR0aqw1737デフォルトの名無しさん
2020/01/26(日) 17:21:00.68ID:aNHbuwn9 >>736
STLの作者は、自分では分かり易くしようとしているようでいて実際には逆に分かりにくくしてしまっている。
STLの作者は、自分では分かり易くしようとしているようでいて実際には逆に分かりにくくしてしまっている。
738デフォルトの名無しさん
2020/01/26(日) 17:22:57.37ID:Yuet6lAk STLは神がかってるけどな。
あの時代によく設計できたな。
あの時代によく設計できたな。
739デフォルトの名無しさん
2020/01/26(日) 17:23:15.02ID:aRFw4TjA >>735
自分で好きなようにプリプロセッサを実装すればいいんじゃね?
自分で好きなようにプリプロセッサを実装すればいいんじゃね?
740デフォルトの名無しさん
2020/01/26(日) 17:25:09.27ID:aRFw4TjA >>737
その分かりにくいの主語は、世間一般ではなくお前個人なんだろ。
その分かりにくいの主語は、世間一般ではなくお前個人なんだろ。
741デフォルトの名無しさん
2020/01/26(日) 17:33:33.23ID:jQnb27FW >>739
互換性
互換性
742デフォルトの名無しさん
2020/01/26(日) 17:42:50.97ID:VrR0aqw1 >>738
だよな
Cではmemsetやqsortにvoid*というリスキーなことをせざるを得なかったのを
関数テンプレートで型情報をきちんと面倒見るようにできたし
リニアサーチがない等のCライブラリの不備も解消した
そこに気付かないやつはプログラマとしての資質を問われる
だよな
Cではmemsetやqsortにvoid*というリスキーなことをせざるを得なかったのを
関数テンプレートで型情報をきちんと面倒見るようにできたし
リニアサーチがない等のCライブラリの不備も解消した
そこに気付かないやつはプログラマとしての資質を問われる
743デフォルトの名無しさん
2020/01/26(日) 17:50:07.66ID:loc7kxiY744デフォルトの名無しさん
2020/01/26(日) 17:53:28.80ID:loc7kxiY 最新仕様とか書いたらSTLが最新?とか言われそうなんで先に言っとくけど
マクロ(プリプロセス時メタプログラミング)を貶してテンプレートは持て囃すのはダブスタってことなんで誤解なきよう
マクロ(プリプロセス時メタプログラミング)を貶してテンプレートは持て囃すのはダブスタってことなんで誤解なきよう
745デフォルトの名無しさん
2020/01/26(日) 17:53:53.15ID:Yuet6lAk ただ俺としては右辺値参照の発見にノーベル賞を授与するべきだと思うんだよな。
これ人類史上でも大きな発見じゃないかと思うんだよな。
これ人類史上でも大きな発見じゃないかと思うんだよな。
746デフォルトの名無しさん
2020/01/26(日) 17:58:05.42ID:hLglXOws おれは真逆の感想
仕様が汚すぎる
仕様が汚すぎる
747デフォルトの名無しさん
2020/01/26(日) 17:58:55.41ID:hLglXOws 右辺値参照というよりmove全般のことね
748デフォルトの名無しさん
2020/01/26(日) 18:01:03.32ID:VrR0aqw1749デフォルトの名無しさん
2020/01/26(日) 18:05:34.93ID:Yuet6lAk STLにノーベル文学賞なんてオサレだと思わないか。
750デフォルトの名無しさん
2020/01/26(日) 18:05:38.96ID:VrR0aqw1 >>746
同感
そもそも左辺値参照にconstをつけたら右辺値を指せるなんて
珍妙なルールが招いた禍根を何とかする苦肉の策が右辺値参照だかんな
今ふり返って見るとconstなしの左辺値参照でもテンポラリを束縛できて
それを禁止したい場合のキーワードがあればよかったんだと思う
同感
そもそも左辺値参照にconstをつけたら右辺値を指せるなんて
珍妙なルールが招いた禍根を何とかする苦肉の策が右辺値参照だかんな
今ふり返って見るとconstなしの左辺値参照でもテンポラリを束縛できて
それを禁止したい場合のキーワードがあればよかったんだと思う
751はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 18:23:11.21ID:zFvDGbzt >>745
互換性を失わない形で性能にも寄与するのはすごい思い付きだと私も思った。
スマートポインタが充実する方向で良くなると思っていたので、
まさか参照を区別する形でコピーを避けるとは思いもよらなかった。
だけどなぁ……。 結局は後付けなんだよね。
互換性を捨てられないという制約の中ではこれ以上ない発明ではあっても、色々と不満はあるよ。
ムーブ自体は言語のコアに組み込まれた機能ではないから
ムーブ後の抜け殻をうっかりいじってもコンパイラは黙って通しちゃうし。
ムーブできるようにしようとすると実質としてはポインタの入れ替えになるから、
各クラス向けにカスタマイズしたスマートポインタを書いてるみたいなもんだ。
本来ならそんなのコンパイラの最適化で頑張ってなんとかすべきことだろ。
言語処理系の敗北の証にすら見える。
いや、良いとは思ってるんだよ。
間違いなく rvalue 参照は素晴らしい発明で、 C++ をより良くした。
でもまあいいことばかりでもないよねっていうちょっとした愚痴。
互換性を失わない形で性能にも寄与するのはすごい思い付きだと私も思った。
スマートポインタが充実する方向で良くなると思っていたので、
まさか参照を区別する形でコピーを避けるとは思いもよらなかった。
だけどなぁ……。 結局は後付けなんだよね。
互換性を捨てられないという制約の中ではこれ以上ない発明ではあっても、色々と不満はあるよ。
ムーブ自体は言語のコアに組み込まれた機能ではないから
ムーブ後の抜け殻をうっかりいじってもコンパイラは黙って通しちゃうし。
ムーブできるようにしようとすると実質としてはポインタの入れ替えになるから、
各クラス向けにカスタマイズしたスマートポインタを書いてるみたいなもんだ。
本来ならそんなのコンパイラの最適化で頑張ってなんとかすべきことだろ。
言語処理系の敗北の証にすら見える。
いや、良いとは思ってるんだよ。
間違いなく rvalue 参照は素晴らしい発明で、 C++ をより良くした。
でもまあいいことばかりでもないよねっていうちょっとした愚痴。
752デフォルトの名無しさん
2020/01/26(日) 18:23:51.73ID:XnsWA8uh STL使って混乱する状況てどんな時だ?
753デフォルトの名無しさん
2020/01/26(日) 18:26:11.67ID:jQnb27FW 構造体/クラスを戻り値にするっていう発想が無かった時代からのつぎはぎ拡張だから
754デフォルトの名無しさん
2020/01/26(日) 18:51:03.98ID:PjjUDKm0 そもそも構造体を=でコピー出来るのが始まりだからな
配列は=でコピーできないのにな
その辺一貫性なかった>C言語
配列は=でコピーできないのにな
その辺一貫性なかった>C言語
755はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 19:06:02.54ID:zFvDGbzt756デフォルトの名無しさん
2020/01/26(日) 19:07:43.07ID:PjjUDKm0 もしCが
構造体を参照するとポインタ相当になります
引数で渡すときも&つけなくても勝手にポインタになります
コピーするときはmemcpyしてください
って仕様だったらC++はどうなってたんだろうな
色々まずいことになるのは確か
構造体を参照するとポインタ相当になります
引数で渡すときも&つけなくても勝手にポインタになります
コピーするときはmemcpyしてください
って仕様だったらC++はどうなってたんだろうな
色々まずいことになるのは確か
757デフォルトの名無しさん
2020/01/26(日) 19:09:16.84ID:PjjUDKm0 ↑ただ、モダンな言語はむしろそういう仕様なんだよな
その代わりGCがあるが
しかし、それはそれで不便なのであった
その代わりGCがあるが
しかし、それはそれで不便なのであった
758デフォルトの名無しさん
2020/01/26(日) 19:23:48.53ID:VrR0aqw1 >>744
おまえさんは
#define STR char* //と、
typedef char* STR; //の違いが
わかってなさそうに見えてしまうが
違うよな?
コンパイラでないものによる字面の読み替えと
コンパイラによる意味の読み替えを
区別するのはダブスタか?
おまえさんは
#define STR char* //と、
typedef char* STR; //の違いが
わかってなさそうに見えてしまうが
違うよな?
コンパイラでないものによる字面の読み替えと
コンパイラによる意味の読み替えを
区別するのはダブスタか?
759デフォルトの名無しさん
2020/01/26(日) 19:38:43.16ID:loc7kxiY760デフォルトの名無しさん
2020/01/26(日) 19:41:08.78ID:loc7kxiY というかVCだとプリプロセスだけ済ませたソース見れるから、
時にテンプレートよりデバッグ楽かもしれない
時にテンプレートよりデバッグ楽かもしれない
761デフォルトの名無しさん
2020/01/26(日) 19:59:37.02ID:VrR0aqw1762はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 20:00:29.28ID:zFvDGbzt マクロを殺すためにどんだけ苦労してきたと思ってんだよ。
763デフォルトの名無しさん
2020/01/26(日) 20:01:26.51ID:hLglXOws またマクロの話かよ
ほんとロートルばっかだなここ
ほんとロートルばっかだなここ
764デフォルトの名無しさん
2020/01/26(日) 20:04:02.76ID:VrR0aqw1 >>762
ほんこれ
ほんこれ
765デフォルトの名無しさん
2020/01/26(日) 20:07:19.94ID:loc7kxiY766デフォルトの名無しさん
2020/01/26(日) 20:10:54.84ID:VrR0aqw1 >>765
744で言っているが?
744で言っているが?
767デフォルトの名無しさん
2020/01/26(日) 20:15:22.55ID:loc7kxiY768デフォルトの名無しさん
2020/01/26(日) 20:21:38.11ID:VrR0aqw1769デフォルトの名無しさん
2020/01/26(日) 20:22:20.72ID:loc7kxiY どんだけ都合のいい脳味噌してんだこいつ
770デフォルトの名無しさん
2020/01/26(日) 20:33:02.73ID:VrR0aqw1 どんな脳味噌と見て貰っても結構だ
744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
771デフォルトの名無しさん
2020/01/26(日) 20:36:39.76ID:Yuet6lAk マクロとテンプレートが同じとかワロ。
772デフォルトの名無しさん
2020/01/26(日) 20:37:56.09ID:6ZE6/BGT Cと違うことを理由にC++を否定する奴たまにいるけど何なん?
なんでCを使わないんだ?
なんでCを使わないんだ?
773デフォルトの名無しさん
2020/01/26(日) 20:40:10.44ID:loc7kxiY お前の都合のいい解釈(プリプロセス時ではなく型の文脈の問題までマクロでどうにかしていたのをtypedefやテンプレートに置き換える)を
そもそもダブスタとは言ってないんで貫くと取ってもらっていいが
それより>>759-760に対する回答はまだなの?
そもそもダブスタとは言ってないんで貫くと取ってもらっていいが
それより>>759-760に対する回答はまだなの?
774デフォルトの名無しさん
2020/01/26(日) 20:43:00.84ID:loc7kxiY775デフォルトの名無しさん
2020/01/26(日) 20:46:23.65ID:yXTxN+fl C言語にこそ、UnifideCallSyntax必要だと思うのだけど、入らないかねー。
関数オーバーロードと一緒に入ったらクラスなんかいらねっ。
関数オーバーロードと一緒に入ったらクラスなんかいらねっ。
776デフォルトの名無しさん
2020/01/26(日) 20:47:29.34ID:hLglXOws c++の専門家の皆さんに質問ですが
using F = int(int)
のように 戻りの型(引数の型) の形式で関数型を書けるようになったのってどのc++からなの?
あとこれを書ける場所ってusingとtemplate以外にある?
using F = int(int)
のように 戻りの型(引数の型) の形式で関数型を書けるようになったのってどのc++からなの?
あとこれを書ける場所ってusingとtemplate以外にある?
777デフォルトの名無しさん
2020/01/26(日) 20:50:40.79ID:VrR0aqw1 >>773
> プリプロセス時ではなく型の文脈の問題までマクロでどうにかしていた
プリプロセス以外でマクロでどうにかするって意味がわからない
よって「ダブスタとは言ってない」の意味も俺には(おそらく、ここの誰にも)通じてない
744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
> プリプロセス時ではなく型の文脈の問題までマクロでどうにかしていた
プリプロセス以外でマクロでどうにかするって意味がわからない
よって「ダブスタとは言ってない」の意味も俺には(おそらく、ここの誰にも)通じてない
744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
778デフォルトの名無しさん
2020/01/26(日) 20:58:53.64ID:loc7kxiY 相手に嫌な思いをさせたいだけの議論は辞めろ気持ち悪い
プリプロセス時の問題に遭遇したことが無いのならお前の方が資質に欠けるし経験も足りてない
>>734の言うことも俺の言う事もそら理解出来んだろう
話にならんよ
プリプロセス時の問題に遭遇したことが無いのならお前の方が資質に欠けるし経験も足りてない
>>734の言うことも俺の言う事もそら理解出来んだろう
話にならんよ
779デフォルトの名無しさん
2020/01/26(日) 21:03:26.54ID:BKKks8j/ c++11以降において「マクロをリッチにする」ってことの代替が
テンプレート、constexpr をリッチにするって方向だろう。
正しい方向だとは思わんが、方向性なり答えはうちだしてはいる。
テンプレート、constexpr をリッチにするって方向だろう。
正しい方向だとは思わんが、方向性なり答えはうちだしてはいる。
780デフォルトの名無しさん
2020/01/26(日) 21:11:06.46ID:loc7kxiY それはそれとしてプリプロセス時プログラミングもやりやすくして欲しいってだけのことだよ
(現実的に叶うとは思ってないが)
(現実的に叶うとは思ってないが)
781デフォルトの名無しさん
2020/01/26(日) 21:11:40.73ID:Yuet6lAk ワロリン。
782デフォルトの名無しさん
2020/01/26(日) 21:18:05.50ID:6ZE6/BGT Qtみたいに独自のプリプロセッサ作ればいいのでは
783デフォルトの名無しさん
2020/01/26(日) 21:19:49.89ID:hLglXOws c++の専門家の皆さま教えて下さい
auto a = +[](int b) { return b;};
このaの型は何ですか?
困っているので秒速でお願いします
auto a = +[](int b) { return b;};
このaの型は何ですか?
困っているので秒速でお願いします
784デフォルトの名無しさん
2020/01/26(日) 21:36:53.40ID:VrR0aqw1785デフォルトの名無しさん
2020/01/26(日) 21:37:51.54ID:VrR0aqw1 私事ですまんが
明日早いんでそろそろ失礼する
明日早いんでそろそろ失礼する
786デフォルトの名無しさん
2020/01/26(日) 21:39:54.66ID:loc7kxiY ワロタ
787デフォルトの名無しさん
2020/01/26(日) 21:46:54.67ID:VrR0aqw1 よかったなw
788デフォルトの名無しさん
2020/01/26(日) 21:54:18.57ID:loc7kxiY まともな反論できんのならはよ寝ろ
789蟻人間 ◆T6xkBnTXz7B0
2020/01/26(日) 21:59:37.91ID:TOQ25Lx5 >>783 int型。
---
君たちひまそうだね。暇だったら、こっちのソースでも見てくれないか?
https://github.com/katahiromz/ImagePocke/blob/master/ImagePocke.cpp
C++/Win32で書いてるんだけど。
ここからドロップした画像ファイルを表示可能にする予定。
画像読み込みにGDI+を使う予定。
---
君たちひまそうだね。暇だったら、こっちのソースでも見てくれないか?
https://github.com/katahiromz/ImagePocke/blob/master/ImagePocke.cpp
C++/Win32で書いてるんだけど。
ここからドロップした画像ファイルを表示可能にする予定。
画像読み込みにGDI+を使う予定。
790デフォルトの名無しさん
2020/01/26(日) 22:27:38.20ID:hLglXOws791デフォルトの名無しさん
2020/01/26(日) 22:46:48.37ID:Pq6RurGB ラムダに+をつけると関数ポインタになるなんてcppreferenceにもないけど常識なの?
792デフォルトの名無しさん
2020/01/26(日) 22:55:11.25ID:hLglXOws そうなんだよね
この仕様がどこで決められてるものかがよくわからない
ぐぐったら
ttps://stackoverflow.com/questions/18889028/a-positive-lambda-what-sorcery-is-this
というのが見つかってなんか built-in overload らしいんだけど
結局のところ関数オブジェクトに対する仕様がどこに書かれているのかよくわからない
でもわりとよく使ってる
この仕様がどこで決められてるものかがよくわからない
ぐぐったら
ttps://stackoverflow.com/questions/18889028/a-positive-lambda-what-sorcery-is-this
というのが見つかってなんか built-in overload らしいんだけど
結局のところ関数オブジェクトに対する仕様がどこに書かれているのかよくわからない
でもわりとよく使ってる
793はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 23:01:50.07ID:zFvDGbzt >>791
・ キャプチャしている変数がないクロージャは関数ポインタに変換可能であり、関数ポインタが必要なところでは暗黙に型変換される
・ クロージャに単項 + を適用することはできない (ので関数ポインタに型変換してから解釈される)
という合わせ技によって関数ポインタになる。
(キャプチャしてる変数があるときは変換できないよ)
・ キャプチャしている変数がないクロージャは関数ポインタに変換可能であり、関数ポインタが必要なところでは暗黙に型変換される
・ クロージャに単項 + を適用することはできない (ので関数ポインタに型変換してから解釈される)
という合わせ技によって関数ポインタになる。
(キャプチャしてる変数があるときは変換できないよ)
794デフォルトの名無しさん
2020/01/26(日) 23:05:52.70ID:Pq6RurGB 関数オブジェクトには関数ポインタへの暗黙の変換が存在して
operator+(T*)がそれ自身を返すからということね
operator+(T*)がそれ自身を返すからということね
795デフォルトの名無しさん
2020/01/26(日) 23:09:35.82ID:hLglXOws まじで?
たまたまできるってことなのか
なんか今後使うのためらうわw
たまたまできるってことなのか
なんか今後使うのためらうわw
796はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 23:11:17.20ID:zFvDGbzt797デフォルトの名無しさん
2020/01/26(日) 23:14:39.96ID:hLglXOws798デフォルトの名無しさん
2020/01/27(月) 00:17:47.09ID:uhXUQTHO 普通に型宣言すればいいだけだよねこれ。
799デフォルトの名無しさん
2020/01/27(月) 00:18:13.23ID:8wq+eSeZ >>776
実験してないので間違ってるかもしれないが、
(型名)ptr で関数ポインタへキャストする場合、
( int(*)(int) )ptr
と書いても良いが、
( int(int) )ptr
と書いても良かったかも知れない。というのは、
typedef int (*FUNC)(int);
と書いても良いし、
typedef int FUNC(int);
と書いてもよかったり、関数型のポインタ pFunc に対して、
(*pFunc)(123);
と書いても良いし、
pFunc(123);
と書いても良い、とか。
実験してないので間違ってるかもしれないが、
(型名)ptr で関数ポインタへキャストする場合、
( int(*)(int) )ptr
と書いても良いが、
( int(int) )ptr
と書いても良かったかも知れない。というのは、
typedef int (*FUNC)(int);
と書いても良いし、
typedef int FUNC(int);
と書いてもよかったり、関数型のポインタ pFunc に対して、
(*pFunc)(123);
と書いても良いし、
pFunc(123);
と書いても良い、とか。
800デフォルトの名無しさん
2020/01/27(月) 00:19:00.09ID:jlvCAhZE >>776
C89 から関数型の表記としては解釈されるかと。
コンパイルが通る文脈は C++ まで無かったかもしれんけど。
C++ でも今のところ using とテンプレート引数以外では使えなさそう。
C89 から関数型の表記としては解釈されるかと。
コンパイルが通る文脈は C++ まで無かったかもしれんけど。
C++ でも今のところ using とテンプレート引数以外では使えなさそう。
801デフォルトの名無しさん
2020/01/27(月) 00:25:21.67ID:8wq+eSeZ >>799
一部、コンパイラが故意にエラーにする可能性は有るが、
int(*ptr)(int);
は、関数へのポインタ型の変数ptrの宣言。
int(*)(int)
は「関数へのポインタ型」そのもの。
int func(int);
は、関数のプロトタイプ宣言だが、内部処理的には関数型の変数 func を定義しているような
解釈がされた後、関数型の場合の特別な処理として変数ではなくプロトタイプ宣言に特別
処理がされる。そして、
int(int)
は「関数型」そのもの、という解釈になる。
よく見るとこれらに対抗関係が有ることが分かる。
なお、最後のint(int)はコンパイラの内部処理的には関数型そのものだという解釈になるが、
コンパイラがその場合に特別にエラーを出す処理系と出さない処理系があるかもしれない。
一部、コンパイラが故意にエラーにする可能性は有るが、
int(*ptr)(int);
は、関数へのポインタ型の変数ptrの宣言。
int(*)(int)
は「関数へのポインタ型」そのもの。
int func(int);
は、関数のプロトタイプ宣言だが、内部処理的には関数型の変数 func を定義しているような
解釈がされた後、関数型の場合の特別な処理として変数ではなくプロトタイプ宣言に特別
処理がされる。そして、
int(int)
は「関数型」そのもの、という解釈になる。
よく見るとこれらに対抗関係が有ることが分かる。
なお、最後のint(int)はコンパイラの内部処理的には関数型そのものだという解釈になるが、
コンパイラがその場合に特別にエラーを出す処理系と出さない処理系があるかもしれない。
802デフォルトの名無しさん
2020/01/27(月) 00:26:31.36ID:8wq+eSeZ >>801
対抗関係 ---> 対応関係
対抗関係 ---> 対応関係
803デフォルトの名無しさん
2020/01/27(月) 00:34:47.99ID:8wq+eSeZ >>801
何が言いたかったというと、戻り値(引数型) を解釈する新しい仕様が追加された
というより、数学の数式のようにみたときに一貫した規則に従っていることが
わかるということ。言葉で言えば、
「定義文に置いて、名前を除去すると型名になる」
という規則。
int func(int);
という定義文に置いて、名前であるのは func。だから、funcを除去した、
int(int)
は、funcの型名になる。名前funcの型は、「関数型」だから、これは関数型
という型名そのものとなる。
int a;
の場合、名前であるのは a で、aの型は、int型。だから、この定義文から
名前を除去した int は、int型ということになる。
int (*pFunc)(int);
の場合も、pFuncという変数の定義文であるが、この定義文における名前とは
pFuncであるので、pFuncを除去したところの
int (*)(int);
は、pFuncの型であるところの、「関数へのポインタ型」となる。
つまり、同じ法則にしたがっている。
何が言いたかったというと、戻り値(引数型) を解釈する新しい仕様が追加された
というより、数学の数式のようにみたときに一貫した規則に従っていることが
わかるということ。言葉で言えば、
「定義文に置いて、名前を除去すると型名になる」
という規則。
int func(int);
という定義文に置いて、名前であるのは func。だから、funcを除去した、
int(int)
は、funcの型名になる。名前funcの型は、「関数型」だから、これは関数型
という型名そのものとなる。
int a;
の場合、名前であるのは a で、aの型は、int型。だから、この定義文から
名前を除去した int は、int型ということになる。
int (*pFunc)(int);
の場合も、pFuncという変数の定義文であるが、この定義文における名前とは
pFuncであるので、pFuncを除去したところの
int (*)(int);
は、pFuncの型であるところの、「関数へのポインタ型」となる。
つまり、同じ法則にしたがっている。
804はちみつ餃子 ◆8X2XSCHEME
2020/01/27(月) 00:36:25.26ID:e3ktUGSY 関数型が暗黙に関数ポインタ型に型変換されるルールで引っ掛かってるってことかな?
関数型そのものは C++ が出現した最初から存在すると思うよ。 C にもあるもの。
こういう特殊な変換ルールを強制するために std::decay がある。
関数型そのものは C++ が出現した最初から存在すると思うよ。 C にもあるもの。
こういう特殊な変換ルールを強制するために std::decay がある。
806デフォルトの名無しさん
2020/01/27(月) 02:13:11.97ID:DIOsR0tc RustってどれくらいC++に取って代わるんろうか
互換性以外でC++使う意味ない、みたいな時代はくる?
互換性以外でC++使う意味ない、みたいな時代はくる?
807デフォルトの名無しさん
2020/01/27(月) 02:15:18.60ID:an2yFfMH Rustの話はRustスレでやれ
布教すんな
布教すんな
808デフォルトの名無しさん
2020/01/27(月) 06:56:19.70ID:EVyt1Wcb >>783
スマートオブジェ
スマートオブジェ
809デフォルトの名無しさん
2020/01/27(月) 09:23:59.26ID:7jNlWdbx C++のライブラリはC++からしか使えないから最高なんです
何故ならヘッダという古臭い仕組みを採用しているからww
なおCOMは
何故ならヘッダという古臭い仕組みを採用しているからww
なおCOMは
810デフォルトの名無しさん
2020/01/27(月) 09:33:48.52ID:PH8qw3WE811デフォルトの名無しさん
2020/01/27(月) 10:29:36.60ID:nw3WJhJD >>783
[](int b) { return b;}; だけなら明らかにラムダ式の関数ポインタだけど
それをオーバーロードか何かの+で虚無と足し算してんの?
*[](int b) { return b;};
これは掛け算でもするの?
[](int b) { return b;}; だけなら明らかにラムダ式の関数ポインタだけど
それをオーバーロードか何かの+で虚無と足し算してんの?
*[](int b) { return b;};
これは掛け算でもするの?
■ このスレッドは過去ログ倉庫に格納されています
