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


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

C++相談室 part147



1 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 17:56:53.03 ID:uFDqtnkl.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part146
https://mevius.5ch.net/test/read.cgi/tech/1573094136/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)

STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**

730 名前:はちみつ餃子 mailto:sage [2020/01/26(日) 01:48:04.74 ID:zFvDGbzt.net]
C から段階的に学んでいける (業務を止めずに) って D&E には書いてあるけど、
今の C++ じゃもう無理だと思うわ。

731 名前:はちみつ餃子 mailto:sage [2020/01/26(日) 01:48:23.93 ID:zFvDGbzt.net]
C++ は C++ としてそこそこの訓練はいるよな。

732 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 02:05:13.00 ID:Y1EGWiT/.net]
はちみつ餃子がでてくる

733 名前:と、どうもこんな時間に腹が減ってきていかん []
[ここ壊れてます]

734 名前:はちみつ餃子 mailto:sage [2020/01/26(日) 02:10:39.45 ID:zFvDGbzt.net]
食えばいいじゃん。

735 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 05:01:35 ID:3a27Zr8u.net]
>>674
gotoの使い方を知らないと大変だね

736 名前:デフォルトの名無しさん [2020/01/26(日) 07:41:47 ID:Yuet6lAk.net]
>>683
禿4を少しは見習っていただきたい。

737 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 10:01:19.30 ID:aNHbuwn9.net]
>>706
それは問題。
でも、STLべったりのC++は Cとの書き方の乖離が激しすぎて、もはやCの冠を被ってほしくない。

738 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 10:06:55.53 ID:BKKks8j/.net]
>>714
関数切り出しできないと大変だね。(特に周りの人たちが。)



739 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 10:47:19 ID:VrR0aqw1.net]
>>716
CはCらしく、C++はC++らしく使えばよろしい
CをPascalっぽく使うやつとかすげー迷惑なのと同じ

740 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 10:53:32 ID:1VU+FMua.net]
>>716
えっ?

   C#

741 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 10:56:24 ID:ZSyO84gV.net]
テンプレートメタプログラミングはC++らしいとも思うけど全然別の言語になっている気がしないでもない

742 名前:◆QZaw55cn4c mailto:sage [2020/01/26(日) 11:09:29 ID:rQ+CcOdx.net]
>>705
情報ありがとうございます
::VirtualAlloc() 系は書いてあることが難しい上に、ばっちゃの遺言「::HeapAlloc() を使え」もあって敬遠していましたが、ここで教えてもらったのもなにかの縁だからデバッグ用に試行してみようと思います

win32api の criticalsection と signal でやっていた(何かがまずくてstarvationに悩まされていました)のも
C++11 になって pthread が大幅に規格に取り込まれた以上、
C++11 の上からの mutex・cond 派に切り替えようか、とか、C++11 になってスタイル変更を考え中です

743 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 11:32:39 ID:loc7kxiY.net]
>>701
マウント失敗乙

744 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 11:33:18 ID:3yHBwxN6.net]
>>717
ループを抜ける為に関数を分けるようなアホと一緒に組むと大変だ

745 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 11:41:25 ID:VrR0aqw1.net]
確かに大変だね
if breakしてる複合文を関数にするときにreturnとか言い出すやつは
longjmpだろうがって

746 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 12:03:53.99 ID:aNHbuwn9.net]
>>720
実際、別言語だと思う。
C++はtemplateや演算子のオーバーライドを使えば、ほぼ別言語をみなせるようなものを上に載せられる設計になっているので。
STLを使いまくるプログラミングの書き方だと、もはやCとは何の関連性もなくなってしまっている。

747 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 12:09:22.76 ID:BKKks8j/.net]
>>723
ループ抜け出すぐらいでそんな苦労するようなコードになってるなら
関数で抜け出すのが当然だろカスが。
いくら脳みそ足らなくてもgoto擁護のために無理筋言ってるってことにそろそろ気づけ。

748 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 12:12:08.41 ID:bvl7bZIP.net]
どんな苦労?



749 名前:デフォルトの名無しさん [2020/01/26(日) 12:13:10.43 ID:Yuet6lAk.net]
ネストするなら別のプログラムに切り分けましょう。
シェルから呼び出せばいいのです。

750 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 12:18:30.55 ID:Scuijf7t.net]
>>725
もともとCってマクロで何でもやりたい放題の言語だぞ
www.pro.or.jp/~fuji/computerbooks/c/c.modula2.html

751 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 12:39:03.45 ID:aRFw4TjA.net]
>>727
「gotoダメ!絶対!教」の戒律を破ることじゃないかな。きっと身を裂かれるほどの苦しみな

752 名前:んだろうw []
[ここ壊れてます]

753 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 12:50:28.18 ID:PjjUDKm0.net]
いったん収まったと思ったら
また goto の話開始してて草
アスペ特融の拘りと言われても仕方がないな

754 名前:デフォルトの名無しさん [2020/01/26(日) 13:01:54.18 ID:Yuet6lAk.net]
goto以外の話題を提供できないお前が悪い。

755 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 14:36:31.44 ID:VrR0aqw1.net]
gotoの話で叩きのめされたやつが話題を変えたいのはわかったよ(ニヤニヤ

756 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:07:41 ID:aNHbuwn9.net]
>>729
たしかにCもマクロを使えば結構何でも出来る。
だが、マクロを多用すると分かりにくくなるとも言われていたし、使い方によっては、ソースコードが全く別言語のようになってしまうことも知られていた。
それと同様の現象がSTLにおいては起きる事態になってしまっている。

757 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:09:16 ID:jQnb27FW.net]
もっとマクロをリッチにしてほしい

758 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:19:16 ID:VrR0aqw1.net]
>>734
なってねえよ
おまえさんにはSTLがIOCCCに見えるのか

慣れの問題と言いたいがおまえさんは極端すぎ
一種の病気だ



759 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:21:00 ID:aNHbuwn9.net]
>>736
STLの作者は、自分では分かり易くしようとしているようでいて実際には逆に分かりにくくしてしまっている。

760 名前:デフォルトの名無しさん [2020/01/26(日) 17:22:57 ID:Yuet6lAk.net]
STLは神がかってるけどな。
あの時代によく設計できたな。

761 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:23:15 ID:aRFw4TjA.net]
>>735
自分で好きなようにプリプロセッサを実装すればいいんじゃね?

762 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:25:09 ID:aRFw4TjA.net]
>>737
その分かりにくいの主語は、世間一般ではなくお前個人なんだろ。

763 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:33:33.23 ID:jQnb27FW.net]
>>739
互換性

764 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:42:50.97 ID:VrR0aqw1.net]
>>738
だよな

Cではmemsetやqsortにvoid*というリスキーなことをせざるを得なかったのを
関数テンプレートで型情報をきちんと面倒見るようにできたし
リニアサーチがない等のCライブラリの不備も解消した

そこに気付かないやつはプログラマとしての資質を問われる

765 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:50:07.66 ID:loc7kxiY.net]
>>738, >>742
あのな、STLは設計構想から含めると十年から数十年かかってんだよ
それだけよく考え抜かれたものが優れてないわけがない
これ何回も書いたんだけどな

「最新仕様追ってる俺スゲー」したいだけの奴の希望的観測はもうこりごりだわ

766 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:53:28.80 ID:loc7kxiY.net]
最新仕様とか書いたらSTLが最新?とか言われそうなんで先に言っとくけど
マクロ(プリプロセス時メタプログラミング)を貶してテンプレートは持て囃すのはダブスタってことなんで誤解なきよう

767 名前:デフォルトの名無しさん [2020/01/26(日) 17:53:53.15 ID:Yuet6lAk.net]
ただ俺としては右辺値参照の発見にノーベル賞を授与するべきだと思うんだよな。
これ人類史上でも大きな発見じゃないかと思うんだよな。

768 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:58:05.42 ID:hLglXOws.net]
おれは真逆の感想
仕様が汚すぎる



769 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 17:58:55 ID:hLglXOws.net]
右辺値参照というよりmove全般のことね

770 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 18:01:03 ID:VrR0aqw1.net]
>>743
742だが、おまえさんは俺が何がわかっていないと言いたいんだ?
どっかの馬の骨が何回書いたかなんて興味ねえが
当たり前のことをドヤられる意味がわからんぞ

771 名前:デフォルトの名無しさん [2020/01/26(日) 18:05:34 ID:Yuet6lAk.net]
STLにノーベル文学賞なんてオサレだと思わないか。

772 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 18:05:38 ID:VrR0aqw1.net]
>>746
同感

そもそも左辺値参照にconstをつけたら右辺値を指せるなんて
珍妙なルールが招いた禍根を何とかする苦肉の策が右辺値参照だかんな

今ふり返って見るとconstなしの左辺値参照でもテンポラリを束縛できて
それを禁止したい場合のキーワードがあればよかったんだと思う

773 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/01/26(日) 18:23:11 ID:zFvDGbzt.net]
>>745
互換性を失わない形で性能

774 名前:にも寄与するのはすごい思い付きだと私も思った。
スマートポインタが充実する方向で良くなると思っていたので、
まさか参照を区別する形でコピーを避けるとは思いもよらなかった。

だけどなぁ……。 結局は後付けなんだよね。
互換性を捨てられないという制約の中ではこれ以上ない発明ではあっても、色々と不満はあるよ。
ムーブ自体は言語のコアに組み込まれた機能ではないから
ムーブ後の抜け殻をうっかりいじってもコンパイラは黙って通しちゃうし。

ムーブできるようにしようとすると実質としてはポインタの入れ替えになるから、
各クラス向けにカスタマイズしたスマートポインタを書いてるみたいなもんだ。
本来ならそんなのコンパイラの最適化で頑張ってなんとかすべきことだろ。
言語処理系の敗北の証にすら見える。

いや、良いとは思ってるんだよ。
間違いなく rvalue 参照は素晴らしい発明で、 C++ をより良くした。
でもまあいいことばかりでもないよねっていうちょっとした愚痴。
[]
[ここ壊れてます]

775 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 18:23:51 ID:XnsWA8uh.net]
STL使って混乱する状況てどんな時だ?

776 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 18:26:11 ID:jQnb27FW.net]
構造体/クラスを戻り値にするっていう発想が無かった時代からのつぎはぎ拡張だから

777 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 18:51:03 ID:PjjUDKm0.net]
そもそも構造体を=でコピー出来るのが始まりだからな
配列は=でコピーできないのにな
その辺一貫性なかった>C言語

778 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/01/26(日) 19:06:02 ID:zFvDGbzt.net]
>>754
配列は (その先頭要素を指す) ポインタに型変換されるルールを入れてしまったので
それと辻褄の合う形には出来なかったんだと思う。



779 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 19:07:43.07 ID:PjjUDKm0.net]
もしCが
構造体を参照するとポインタ相当になります
引数で渡すときも&つけなくても勝手にポインタになります
コピーするときはmemcpyしてください
って仕様だったらC++はどうなってたんだろうな
色々まずいことになるのは確か

780 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 19:09:16.84 ID:PjjUDKm0.net]
↑ただ、モダンな言語はむしろそういう仕様なんだよな
その代わりGCがあるが

しかし、それはそれで不便なのであった

781 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 19:23:48 ID:VrR0aqw1.net]
>>744
おまえさんは
#define STR char* //と、
typedef char* STR; //の違いが
わかってなさそうに見えてしまうが
違うよな?

コンパイラでないものによる字面の読み替えと
コンパイラによる意味の読み替えを
区別するのはダブスタか?

782 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 19:38:43 ID:loc7kxiY.net]
>>758
そういうのじゃなくて、>>734に対して>>736書いたよな?
慣れ、ってのはわからんでもないがSTLの成功にはっちゃけて何でもテンプレートでどうにかする
今の風潮は俺もどうかと思うので。
もちろんマクロでメタプログラミングするよりは遥かに楽だけど、方向性としては同じようなもんだろ

783 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 19:41:08 ID:loc7kxiY.net]
というかVCだとプリプロセスだけ済ませたソース見れるから、
時にテンプレートよりデバッグ楽かもしれない

784 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 19:59:37 ID:VrR0aqw1.net]
>>759
質問に答えてないな
字面の読み替えは評判悪く
意味の読み替えが広く受け入れられているのは
ダブスタか?

785 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/01/26(日) 20:00:29 ID:zFvDGbzt.net]
マクロを殺すためにどんだけ苦労してきたと思ってんだよ。

786 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:01:26 ID:hLglXOws.net]
またマクロの話かよ
ほんとロートルばっかだなここ

787 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:04:02 ID:VrR0aqw1.net]
>>762
ほんこれ

788 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:07:19 ID:loc7kxiY.net]
>>761
それをダブスタとは思わないし言ってもないんだが

>>762
だったら尚のこと歴史に学べよ



789 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:10:54 ID:VrR0aqw1.net]
>>765
744で言っているが?

790 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:15:22 ID:loc7kxiY.net]
>>766
アンカーぐらいちゃんと付けろよボケ

>そこに気付かないやつはプログラマとしての資質を問われる
これは>>734に対する発言だよな?
俺じゃなくてお前が相手の発言を矮小化してバカにしてると気付け

791 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:21:38 ID:VrR0aqw1.net]
>>767
734と俺の問題は
おまえさんと俺の問題とは別だ
話を逸らすな

744の発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ

792 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:22:20 ID:loc7kxiY.net]
どんだけ都合のいい脳味噌してんだこいつ

793 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:33:02 ID:VrR0aqw1.net]
どんな脳味噌と見て貰っても結構だ

744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ

794 名前:デフォルトの名無しさん [2020/01/26(日) 20:36:39 ID:Yuet6lAk.net]
マクロとテンプレートが同じとかワロ。

795 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:37:56.09 ID:6ZE6/BGT.net]
Cと違うことを理由にC++を否定する奴たまにいるけど何なん?
なんでCを使わないんだ?

796 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:40:10.44 ID:loc7kxiY.net]
お前の都合のいい解釈(プリプロセス時ではなく型の文脈の問題までマクロでどうにかしていたのをtypedefやテンプレートに置き換える)を
そもそもダブスタとは言ってないんで貫くと取ってもらっていいが
それより>>759-760に対する回答はまだなの?

797 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:43:00.84 ID:loc7kxiY.net]
>>771
メタプログラミングとして見るとやってることは一緒なんだが
言語としての出来不出来は別として(個人的には>>735に同意

798 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:46:23.65 ID:yXTxN+fl.net]
C言語にこそ、UnifideCallSyntax必要だと思うのだけど、入らないかねー。
関数オーバーロードと一緒に入ったらクラスなんかいらねっ。



799 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:47:29.34 ID:hLglXOws.net]
c++の専門家の皆さんに質問ですが

using F = int(int)

のように 戻りの型(引数の型) の形式で関数型を書けるようになったのってどのc++からなの?
あとこれを書ける場所ってusingとtemplate以外にある?

800 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:50:40.79 ID:VrR0aqw1.net]
>>773
> プリプロセス時ではなく型の文脈の問題までマクロでどうにかしていた

プリプロセス以外でマクロでどうにかするって意味がわからない
よって「ダブスタとは言ってない」の意味も俺には(おそらく、ここの誰にも)通じてない

744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ

801 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 20:58:53.64 ID:loc7kxiY.net]
相手に嫌な思いをさせたいだけの議論は辞めろ気持ち悪い
プリプロセス時の問題に遭遇したことが無いのならお前の方が資質に欠けるし経験も足りてない
>>734の言うことも俺の言う事もそら理解出来んだろう
話にならんよ

802 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 21:03:26.54 ID:BKKks8j/.net]
c++11以降において「マクロをリッチにする」ってことの代替が
テンプレート、constexpr をリッチにするって方向だろう。
正しい方向だとは思わんが、方向性なり答えはうちだしてはいる。

803 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 21:11:06.46 ID:loc7kxiY.net]
それはそれとしてプリプロセス時プログラミングもやりやすくして欲しいってだけのことだよ
(現実的に叶うとは思ってないが)

804 名前:デフォルトの名無しさん [2020/01/26(日) 21:11:40.73 ID:Yuet6lAk.net]
ワロリン。

805 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 21:18:05.50 ID:6ZE6/BGT.net]
Qtみたいに独自のプリプロセッサ作ればいいのでは

806 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 21:19:49.89 ID:hLglXOws.net]
c++の専門家の皆さま教えて下さい

auto a = +[](int b) { return b;};

このaの型は何ですか?
困っているので秒速でお願いします

807 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 21:36:53.40 ID:VrR0aqw1.net]
>>778
間違いを認めることができない未熟者には
嫌な思いからも学ぶべき教訓があるんだよ

やめてくれえ、気持ち悪いいい、それで?
命令口調では許してやらんぞ

808 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 21:37:51.54 ID:VrR0aqw1.net]
私事ですまんが
明日早いんでそろそろ失礼する



809 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 21:39:54.66 ID:loc7kxiY.net]
ワロタ

810 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 21:46:54.67 ID:VrR0aqw1.net]
よかったなw

811 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 21:54:18.57 ID:loc7kxiY.net]
まともな反論できんのならはよ寝ろ

812 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2020/01/26(日) 21:59:37 ID:TOQ25Lx5.net]
>>783 int型。

---
君たちひまそうだね。暇だったら、こっちのソースでも見てくれないか?
https://github.com/katahiromz/ImagePocke/blob/master/ImagePocke.cpp

C++/Win32で書いてるんだけど

813 名前:B
ここからドロップした画像ファイルを表示可能にする予定。
画像読み込みにGDI+を使う予定。
[]
[ここ壊れてます]

814 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 22:27:38 ID:hLglXOws.net]
静かになったなw

>>789
関数ポインタ
ttps://wandbox.org/permlink/zLH8pFOt3tLJhujk

815 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 22:46:48.37 ID:Pq6RurGB.net]
ラムダに+をつけると関数ポインタになるなんてcppreferenceにもないけど常識なの?

816 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 22:55:11.25 ID:hLglXOws.net]
そうなんだよね
この仕様がどこで決められてるものかがよくわからない
ぐぐったら
ttps://stackoverflow.com/questions/18889028/a-positive-lambda-what-sorcery-is-this
というのが見つかってなんか built-in overload らしいんだけど
結局のところ関数オブジェクトに対する仕様がどこに書かれているのかよくわからない
でもわりとよく使ってる

817 名前:はちみつ餃子 mailto:sage [2020/01/26(日) 23:01:50.07 ID:zFvDGbzt.net]
>>791
・ キャプチャしている変数がないクロージャは関数ポインタに変換可能であり、関数ポインタが必要なところでは暗黙に型変換される
・ クロージャに単項 + を適用することはできない (ので関数ポインタに型変換してから解釈される)

という合わせ技によって関数ポインタになる。
(キャプチャしてる変数があるときは変換できないよ)

818 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 23:05:52.70 ID:Pq6RurGB.net]
関数オブジェクトには関数ポインタへの暗黙の変換が存在して
operator+(T*)がそれ自身を返すからということね



819 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 23:09:35.82 ID:hLglXOws.net]
まじで?
たまたまできるってことなのか
なんか今後使うのためらうわw

820 名前:はちみつ餃子 mailto:sage [2020/01/26(日) 23:11:17.20 ID:zFvDGbzt.net]
>>795
専用の、クロージャをポインタに変換する機能というわけではないという意味ではたまたまだけど、
ちゃんと保証された動作なのでためらわなくていいと思うなぁ。

821 名前:デフォルトの名無しさん mailto:sage [2020/01/26(日) 23:14:39.96 ID:hLglXOws.net]
>>796
もし今後関数オブジェクトに他の暗黙変換が追加されたらって考えると気が引ける
まぁ使うんだけどさ

822 名前:デフォルトの名無しさん mailto:sage [2020/01/27(月) 00:17:47 ID:uhXUQTHO.net]
普通に型宣言すればいいだけだよねこれ。

823 名前:デフォルトの名無しさん mailto:sage [2020/01/27(月) 00:18:13 ID:8wq+eSeZ.net]
>>776
実験してないので間違ってるかもしれないが、
(型名)ptr で関数ポインタへキャストする場合、
( int(*)(int) )ptr
と書いても良いが、
( int(int) )ptr
と書いても良かったかも知れない。というのは、
typedef int (*FUNC)(int);
と書いても良いし、
typedef int FUNC(int);
と書いてもよかったり、関数型のポインタ pFunc に対して、
(*pFunc)(123);
と書いても良いし、
pFunc(123);
と書いても良い、とか。

824 名前:デフォルトの名無しさん mailto:sage [2020/01/27(月) 00:19:00 ID:jlvCAhZE.net]
>>776
C89 から関数型の表記としては解釈されるかと。
コンパイルが通る文脈は C++ まで無かったかもしれんけど。
C++ でも今のところ using とテンプレート引数以外では使えなさそう。

825 名前:デフォルトの名無しさん mailto:sage [2020/01/27(月) 00:25:21 ID:8wq+eSeZ.net]
>>799
一部、コンパイラが故意にエラーにする可能性は有るが、
int(*ptr)(int);
は、関数へのポインタ型の変数ptrの宣言。
int(*)(int)
は「関数へのポインタ型」そのもの。
int func(int);
は、関数のプロトタイプ宣言だが、内部処理的には関数型の変数 func を定義しているような
解釈がされた後、関数型の場合の特別な処理として変数ではなくプロトタイプ宣言に特別
処理がされる。そして、
int(int)
は「関数型」そのもの、という解釈になる。
よく見るとこれらに対抗関係が有ることが分かる。
なお、最後のint(int)はコンパイラの内部処理的には関数型そのものだという解釈になるが、
コンパイラがその場合に特別にエラーを出す処理系と出さない処理系があるかもしれない。

826 名前:デフォルトの名無しさん mailto:sage [2020/01/27(月) 00:26:31 ID:8wq+eSeZ.net]
>>801
対抗関係 ---> 対応関係

827 名前:デフォルトの名無しさん mailto:sage [2020/01/27(月) 00:34:47 ID:8wq+eSeZ.net]
>>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の型であるところの、「関数へのポインタ型」となる。

つまり、同じ法則にしたがっている。

828 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/01/27(月) 00:36:25 ID:e3ktUGSY.net]
関数型が暗黙に関数ポインタ型に型変換されるルールで引っ掛かってるってことかな?
関数型そのものは C++ が出現した最初から存在すると思うよ。 C にもあるもの。

こういう特殊な変換ルールを強制するために std::decay がある。



829 名前:800 mailto:sage [2020/01/27(月) 01:15:58.29 ID:jlvCAhZE.net]
>>776
typeid で使ってもコンパイル通った。

830 名前:デフォルトの名無しさん mailto:sage [2020/01/27(月) 02:13:11 ID:DIOsR0tc.net]
RustってどれくらいC++に取って代わるんろうか
互換性以外でC++使う意味ない、みたいな時代はくる?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<214KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef