次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137
http://mevius.5ch.net/test/read.cgi/tech/1531558382/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part138
レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん (スフッ Sd9f-fGne)
2018/08/05(日) 18:02:36.57ID:DigzqJtZd899デフォルトの名無しさん (ワッチョイ ff7b-x173)
2019/12/16(月) 00:23:53.19ID:i+s7iGW+0 >>895
whileで駄目なコード書いてみ?
whileで駄目なコード書いてみ?
900デフォルトの名無しさん (ワッチョイ ff1a-xO71)
2019/12/16(月) 00:28:09.44ID:0zaeABy30 (早くこの隔離スレを終わらせたくなってわざとやってる気がしてきた)
901デフォルトの名無しさん (ワッチョイ ff7b-x173)
2019/12/16(月) 00:56:47.70ID:i+s7iGW+0902デフォルトの名無しさん (ワッチョイ a2b3-n4pN)
2019/12/16(月) 03:48:32.59ID:Awem8+qZ0 >>898,900
こいつはMIPS君とか呼ばれてるらしいんだが、間違い指摘されたりするとファビョって暴れ出すんだよ
思い込みが激しいから、それが原因でしょっちゅう間違いをやらかすんだけど、
やたらとプライドだけは高いから引っ込みがつかなくなって連投しだすんだな
この前も、アセンブラ初心者スレで「キャリーフラグがアウトオブオーダー実行を妨げる」とか言って大恥かいたはずなんだけどね
アウトオブオーダーを正しく理解してたらそんなことは言い出さない(cmovで簡単に回避できるので)
平日の昼間でも連投してるから、おそらく頭がカチカチで5chしか居場所のない爺だと思う
相手しても疲れるだけだよ
こいつはMIPS君とか呼ばれてるらしいんだが、間違い指摘されたりするとファビョって暴れ出すんだよ
思い込みが激しいから、それが原因でしょっちゅう間違いをやらかすんだけど、
やたらとプライドだけは高いから引っ込みがつかなくなって連投しだすんだな
この前も、アセンブラ初心者スレで「キャリーフラグがアウトオブオーダー実行を妨げる」とか言って大恥かいたはずなんだけどね
アウトオブオーダーを正しく理解してたらそんなことは言い出さない(cmovで簡単に回避できるので)
平日の昼間でも連投してるから、おそらく頭がカチカチで5chしか居場所のない爺だと思う
相手しても疲れるだけだよ
903デフォルトの名無しさん (ワッチョイ 7773-2Nzf)
2019/12/16(月) 08:16:52.87ID:xr9KOlE00904デフォルトの名無しさん (ワッチョイ 7773-2Nzf)
2019/12/16(月) 08:21:18.41ID:xr9KOlE00 >>902
キャリー君おはよう
キャリー君おはよう
905デフォルトの名無しさん (ワッチョイ 7773-2Nzf)
2019/12/16(月) 08:32:06.41ID:xr9KOlE00 キャリーフラグが大好きキャリー君
知識不足でまともな会話が出来ないキャリー君
いつも長文で御苦労様
知識不足でまともな会話が出来ないキャリー君
いつも長文で御苦労様
906デフォルトの名無しさん (ワッチョイ ff7b-x173)
2019/12/16(月) 09:17:08.40ID:i+s7iGW+0 >>903
それは do-while と俺は言っている。
とりあえず俺の記載ミスも仕様に関する誤解も酷かったので、一端話を整理する。(もう一度書き直す)
スコープは [ ] で書くとして、if や switch のようにスコープを『追加』されている場合、以下となる。(878と同じ)
[ for ( .,.. ) [ { } ]] // (または [ for ( ... ) { } ] とも解釈出来る)
[ if ( ... ) [ { } ]]
[ switch ( ... ) [ { } ]]
よって while 文は
[ while ( ... ) [ { } ]]
と解釈を変更することにより、互換性の問題なしで for/if/swtch と揃える事は可能。
俺の予想ではこれは時間の問題で仕様に入る。
do-whileは
[ do [ { } ] while ( ... ) ]
としても意味がないので、
[ do { } while ( ... ) ]
とするしかないが、これだと互換性の問題を回避出来ない。
ここまではいいか?
お前は議論慣れが全然足りない。
whileとdo-whileで全然違うこの状況で、do-whileを略してwhileと言ってはいけない。
つまり>>880がよくない。これでは話が混乱する。
ただ、混乱しても収拾すればいいだけだ。まずはここまでの認識を確認する。
それは do-while と俺は言っている。
とりあえず俺の記載ミスも仕様に関する誤解も酷かったので、一端話を整理する。(もう一度書き直す)
スコープは [ ] で書くとして、if や switch のようにスコープを『追加』されている場合、以下となる。(878と同じ)
[ for ( .,.. ) [ { } ]] // (または [ for ( ... ) { } ] とも解釈出来る)
[ if ( ... ) [ { } ]]
[ switch ( ... ) [ { } ]]
よって while 文は
[ while ( ... ) [ { } ]]
と解釈を変更することにより、互換性の問題なしで for/if/swtch と揃える事は可能。
俺の予想ではこれは時間の問題で仕様に入る。
do-whileは
[ do [ { } ] while ( ... ) ]
としても意味がないので、
[ do { } while ( ... ) ]
とするしかないが、これだと互換性の問題を回避出来ない。
ここまではいいか?
お前は議論慣れが全然足りない。
whileとdo-whileで全然違うこの状況で、do-whileを略してwhileと言ってはいけない。
つまり>>880がよくない。これでは話が混乱する。
ただ、混乱しても収拾すればいいだけだ。まずはここまでの認識を確認する。
907デフォルトの名無しさん (ワッチョイ ff7b-x173)
2019/12/16(月) 09:18:17.98ID:i+s7iGW+0 そして何度も言っているが、
その先の、「互換性がないがどうするか?」という点についてはここで、または俺と君とで詰める意味がない。
>>812については既に>>868で言ったが、その仕様では見やすくないので俺なら使わない。
だから仕様として入れる意味も、改訂する意味もない、というのが俺の意見だ。ただしそれだと
[ do ( ... ) [ { } ] while ( ... ) ]
形式に出来、互換性の問題なく、for/if/switch/whileと揃えられる。
だから提案すれば通る可能性はある。
事の発端は808、「do-while が使えなかったのはスコープの仕様が『間違っていた』からではないか?」という俺の見解だが、
今現在のところ、
if と switch について間違っていたと言うのは厳しいが、修正されている。
while については直前にループ変数を定義するだけの使い方も本当によくあるので、
この仕様は明確に間違っていたと言える。
そして for/if/swtch と揃えることに障害がないのでじきに修正されるはず。
問題は do-while で、812みたいな糞ならイラネ、なら解決策がない。
その先の、「互換性がないがどうするか?」という点についてはここで、または俺と君とで詰める意味がない。
>>812については既に>>868で言ったが、その仕様では見やすくないので俺なら使わない。
だから仕様として入れる意味も、改訂する意味もない、というのが俺の意見だ。ただしそれだと
[ do ( ... ) [ { } ] while ( ... ) ]
形式に出来、互換性の問題なく、for/if/switch/whileと揃えられる。
だから提案すれば通る可能性はある。
事の発端は808、「do-while が使えなかったのはスコープの仕様が『間違っていた』からではないか?」という俺の見解だが、
今現在のところ、
if と switch について間違っていたと言うのは厳しいが、修正されている。
while については直前にループ変数を定義するだけの使い方も本当によくあるので、
この仕様は明確に間違っていたと言える。
そして for/if/swtch と揃えることに障害がないのでじきに修正されるはず。
問題は do-while で、812みたいな糞ならイラネ、なら解決策がない。
908デフォルトの名無しさん (ワッチョイ 7773-2Nzf)
2019/12/16(月) 19:17:21.57ID:xr9KOlE00 じゃあ演算子の優先順位もおかしいから
今から変えようか
今から変えようか
909デフォルトの名無しさん (ワッチョイ 574f-xO71)
2019/12/16(月) 21:08:24.55ID:79yFDnLG0 1. 今の仕様は間違っているから修正されなければならない
2. 間違いを正しく修正するうえでは互換性が失われるのも仕方がない
テロリストや狂信者の思考やね。
2. 間違いを正しく修正するうえでは互換性が失われるのも仕方がない
テロリストや狂信者の思考やね。
910デフォルトの名無しさん (ワッチョイ c612-X5Um)
2019/12/16(月) 21:17:34.10ID:kmOA257c0 char* ptr = "string";
これを正したのはテロリストや狂信者か
これを正したのはテロリストや狂信者か
911デフォルトの名無しさん (ワッチョイ c612-X5Um)
2019/12/16(月) 21:18:58.12ID:kmOA257c0 getsの廃止も1.と2.の原理に主義を置いた決断だね
912デフォルトの名無しさん (ワッチョイ c612-X5Um)
2019/12/16(月) 21:30:00.29ID:kmOA257c0 俺は本来あんなクズの肩なんざ持ちかねえが
おかしいことはおかしいと言わねば気が済まん
頼むから奴よかマシな言い訳してくれ
おかしいことはおかしいと言わねば気が済まん
頼むから奴よかマシな言い訳してくれ
913デフォルトの名無しさん (ワッチョイ 7773-2Nzf)
2019/12/16(月) 21:33:45.50ID:xr9KOlE00 演算子の優先順位もおかしいから
今から変えよう
今から変えよう
914デフォルトの名無しさん (ワッチョイ a201-GBjH)
2019/12/16(月) 22:12:40.02ID:lHOInDb/0 do-whileはもう廃止でいいじゃん
それより統一loop構文考えようぜ
loopで気持ち悪いのは、loopの脱出条件が複数ある場合
for、whileもループを回す条件を書くじゃん
でもloop中に条件によってbreakする場合って当然ループを脱出する条件を書くじゃん
この論理が裏返ってるところでよく間違えるし、
文法的に異質なのもわかりにくい
誰かナイスなアイデア考えてくれ
それより統一loop構文考えようぜ
loopで気持ち悪いのは、loopの脱出条件が複数ある場合
for、whileもループを回す条件を書くじゃん
でもloop中に条件によってbreakする場合って当然ループを脱出する条件を書くじゃん
この論理が裏返ってるところでよく間違えるし、
文法的に異質なのもわかりにくい
誰かナイスなアイデア考えてくれ
915デフォルトの名無しさん (ワッチョイ 7773-2Nzf)
2019/12/16(月) 22:15:02.26ID:xr9KOlE00 for-while
916デフォルトの名無しさん (ワッチョイ 067b-wY8Q)
2019/12/16(月) 22:15:13.36ID:7RbBMAS80 言語を考えるスレじゃねーだろここ
917デフォルトの名無しさん (ワッチョイ a201-GBjH)
2019/12/16(月) 22:20:45.27ID:lHOInDb/0 ここでみんなで考えて江添に標準化させよう
918デフォルトの名無しさん (ワッチョイ ff7b-x173)
2019/12/16(月) 23:35:21.75ID:i+s7iGW+0919デフォルトの名無しさん (ワッチョイ ff7b-x173)
2019/12/16(月) 23:42:01.75ID:i+s7iGW+0 何度も繰り返した展開だが話を整理すると、
>>912みたいなクズゆとりが結局自由に振る舞える状況では、どうにもならない。
だから俺は912みたいなクズゆとりを排除出来る場所を作ろうとしている。
文句言うだけ言って居座り、それを悪びれもしない。
ゆとりの問題は、これをクズだと認識出来ないことだ。
>>912みたいなクズゆとりが結局自由に振る舞える状況では、どうにもならない。
だから俺は912みたいなクズゆとりを排除出来る場所を作ろうとしている。
文句言うだけ言って居座り、それを悪びれもしない。
ゆとりの問題は、これをクズだと認識出来ないことだ。
920デフォルトの名無しさん (ワッチョイ 977b-X0Nr)
2019/12/17(火) 05:10:23.79ID:m/3ORcYe0 >>910-911
「型が違います」「関数が存在しません」と
コンパイラやリンカがエラーにしてくれる変更は
まだタチがいいんだよね。
困るのは黙って挙動が変わるような変更。
もっとも、いまはビルドツールもリッチになってて
「新旧の規格で動作が違うよ、大丈夫?」みたいな
親切な警告を出してくれるだろうけど。
「型が違います」「関数が存在しません」と
コンパイラやリンカがエラーにしてくれる変更は
まだタチがいいんだよね。
困るのは黙って挙動が変わるような変更。
もっとも、いまはビルドツールもリッチになってて
「新旧の規格で動作が違うよ、大丈夫?」みたいな
親切な警告を出してくれるだろうけど。
921デフォルトの名無しさん (ドコグロ MM2f-ECc1)
2019/12/17(火) 06:50:41.01ID:YMIUnRyvM コンパイラオプションで互換モード付ければいいだけ
そもそも>>833のコードがどれだけあるのかと
そもそも>>833のコードがどれだけあるのかと
922デフォルトの名無しさん (ワッチョイ a2b3-n4pN)
2019/12/17(火) 07:50:24.25ID:szajkj1a0 >>905
おいおい、突然どうしたw
2人にアンカー張ってるんだから、あんたのことを指してたつもりじゃなかったんだが
それに「いつも」って何だ?
もしかして、「5chしか居場所のない爺」に反応して墓穴でも掘ったのかw
おいおい、突然どうしたw
2人にアンカー張ってるんだから、あんたのことを指してたつもりじゃなかったんだが
それに「いつも」って何だ?
もしかして、「5chしか居場所のない爺」に反応して墓穴でも掘ったのかw
923デフォルトの名無しさん (ワッチョイ ff7b-x173)
2019/12/17(火) 10:04:58.28ID:vM5Ctsvv0 >>922
ゆとり死ね
お前もっさっさと出て行けよ
お前の書き込みなんて何ら有効な物がないだろ
お前は邪魔しかしてない
お前らゆとりはそれを平気でやるところがクズなんだよ
そしてそれを自覚出来てないから嫌われる
結果的にゆとり自身がゆとりの安住の地を壊してる
だからゆとりはゆとりコミュニティを持てずに(ゆとりからすると)老害コミュニティに混ざろうとするが、
それもこっちにとっては大迷惑なんだが
老害だと思うなら来るな
来るならおまえらゆとりよりお前らが馬鹿にしている老害の方がましだと認めていることになるのを認識しろ
そしてもうちょっとましに振る舞え
といっても、既に言ったが、きちんと使えている奴と全く駄目な奴に分化しつつある
勿論ゆとり内にもきちんと使えている奴もいる
そして俺はそれを差別せず、きっちり「ネットの使い方が分かってない馬鹿」だけを排除出来る場所を作る
ここで言うと、まず>>912(=859)と>>922、この2人をBAN出来ればずいぶんましになると思う
(俺だったらそれでまず様子見、駄目なら3人目>>914(=837)をBANしていく)
まあこういう事も何度も言ったことだが
もし俺の構想に賛同するなら、
誰がコミュニティを壊しているのか、誰をBANすればそれを修正出来るのかを、いちいち考えておいて欲しい
日本人にはその経験が無く、これを適切に出来る奴が少ない
間違ったBANを発行すれば、コミュニティは酷く崩壊する
例えばここだと>>811(ワッチョイ 7773=一番沢山書いている奴)をBANしてはいけない
彼はウザがられるかもしれないが、彼をBANするようでは自由な議論は出来ないから、存在価値が無くなり、みんな出ていくことになる
(なお俺は811をウザイだなんて思ってはいない、むしろ元気があってよろしい)
ゆとり死ね
お前もっさっさと出て行けよ
お前の書き込みなんて何ら有効な物がないだろ
お前は邪魔しかしてない
お前らゆとりはそれを平気でやるところがクズなんだよ
そしてそれを自覚出来てないから嫌われる
結果的にゆとり自身がゆとりの安住の地を壊してる
だからゆとりはゆとりコミュニティを持てずに(ゆとりからすると)老害コミュニティに混ざろうとするが、
それもこっちにとっては大迷惑なんだが
老害だと思うなら来るな
来るならおまえらゆとりよりお前らが馬鹿にしている老害の方がましだと認めていることになるのを認識しろ
そしてもうちょっとましに振る舞え
といっても、既に言ったが、きちんと使えている奴と全く駄目な奴に分化しつつある
勿論ゆとり内にもきちんと使えている奴もいる
そして俺はそれを差別せず、きっちり「ネットの使い方が分かってない馬鹿」だけを排除出来る場所を作る
ここで言うと、まず>>912(=859)と>>922、この2人をBAN出来ればずいぶんましになると思う
(俺だったらそれでまず様子見、駄目なら3人目>>914(=837)をBANしていく)
まあこういう事も何度も言ったことだが
もし俺の構想に賛同するなら、
誰がコミュニティを壊しているのか、誰をBANすればそれを修正出来るのかを、いちいち考えておいて欲しい
日本人にはその経験が無く、これを適切に出来る奴が少ない
間違ったBANを発行すれば、コミュニティは酷く崩壊する
例えばここだと>>811(ワッチョイ 7773=一番沢山書いている奴)をBANしてはいけない
彼はウザがられるかもしれないが、彼をBANするようでは自由な議論は出来ないから、存在価値が無くなり、みんな出ていくことになる
(なお俺は811をウザイだなんて思ってはいない、むしろ元気があってよろしい)
924デフォルトの名無しさん (ブーイモ MM02-ScWb)
2019/12/17(火) 18:09:37.99ID:6xxsd82OM void君もあと80レスの命か。さよならvoid君
925デフォルトの名無しさん (ワッチョイ f795-r9Jq)
2019/12/19(木) 18:44:19.79ID:RK05kZ1/0 威張れるところがここしかない惨めなオナニー小僧
実社会ではゴミにすらカウントされていないくせに
実社会ではゴミにすらカウントされていないくせに
926デフォルトの名無しさん (ワントンキン MMb8-7i8z)
2019/12/30(月) 16:20:58.30ID:9i/1tGuTM 最近はCMAKE_CXX_FLAGSやadd_compile_optionsを使うな、target_compile_optionsを使えとか言われてるけどさ、
数10のターゲットにちまちま-Wallつけるとかめんどいんだけど
数10のターゲットにちまちま-Wallつけるとかめんどいんだけど
927デフォルトの名無しさん (ワッチョイ 0c01-RbSw)
2019/12/30(月) 16:26:42.95ID:0guh/JiB0 数十のターゲットをサポートする心意気はすごいね
当然CI使ってると思うけど全部テスト可能?
当然CI使ってると思うけど全部テスト可能?
928デフォルトの名無しさん (ワンミングク MM92-0tYc)
2020/01/01(水) 01:22:36.45ID:m6ZauGzvM >>927
引き継いだプロジェクトがくそみたいなmakefileを使っていたからCMakeで書き直した
当然テストされてない(testというディレクトリはあるが保守していないので動く保証がないと言われた)
引き継いだプロジェクトがくそみたいなmakefileを使っていたからCMakeで書き直した
当然テストされてない(testというディレクトリはあるが保守していないので動く保証がないと言われた)
929デフォルトの名無しさん (ワッチョイ 0c01-QpYc)
2020/04/28(火) 19:31:45.40ID:AaGQGXoS0 libgccの大きさじゃなくてunwind用のハンドラコードの増加じゃないの?
930デフォルトの名無しさん (ワッチョイ e77b-kZrw)
2020/04/29(水) 06:37:41.73ID:8simRhZl0 「別のスレッド」ってのはここか(相談室150での流れ)。
931デフォルトの名無しさん (ワッチョイ 5b1f-eSlW)
2020/05/14(木) 08:09:49.68ID:kFzSb43F0 C++で複数のクラス(namespace)に同じenumを設定したいのですが
いちいち全部にコピペする以外にいいやり方ありませんかね?
class A{public: enum{One, Two, Three}; };
class B{public: enum{One, Two, Three}; }; // enumの中身はまったく同じ
いちいち全部にコピペする以外にいいやり方ありませんかね?
class A{public: enum{One, Two, Three}; };
class B{public: enum{One, Two, Three}; }; // enumの中身はまったく同じ
932デフォルトの名無しさん (ワッチョイ c30e-gIXh)
2020/05/14(木) 08:19:55.82ID:Qhhsb9+b0 継承すれば?
class BASE{public: enum{One, Two, Three}; };
class A : BASE { };
class B : BASE { };
class BASE{public: enum{One, Two, Three}; };
class A : BASE { };
class B : BASE { };
933デフォルトの名無しさん (ワッチョイ 5b1f-eSlW)
2020/05/14(木) 08:46:57.24ID:kFzSb43F0 それでいけました
ありがとうございます
ありがとうございます
934デフォルトの名無しさん (ワッチョイ 8f7b-uiXD)
2020/06/28(日) 12:36:24.26ID:wAVx8sTD0 VC++/CLIで構造体のローカル定義が禁止されているのだけど、理由って分かる?
以下のC3156, C3923を仕様とした理由を知りたい。
混在は問題があるにしても、マネージド内のローカルマネージド構造体定義/使用(場所C)は問題ないように思える。
value struct {int offset, int len; }; // OK (場所A)
void somefunc(bool condition){
struct { int offset, int len; } info; // error C3923 (場所B)
value struct {int offset, int len; } info2; // error C3156, C3923 (場所C)
if (condition) {
value struct {int offset, int len; } info2; // error C3156, C3923 (場所D)
}
// (場所E)
}
// C3156: マネージ型のローカル定義を持つことができません。
// C3923: ローカル クラス、構造体、または共用体の定義は、マネージ クラスのメンバ関数では使用できません
今更ながら構造体のローカル定義が出来ることを知った。
いや、元々;必須なのは文法的に妙だとは思っていたが、
関数のように定義と使用を明確に分離しておらず、ローカル定義での使用を主軸とするなら納得ではある。
俺はゴリゴリ書くようになってからはVC++しか使ってないので、VC++で出来ない=Cでも出来ないと勘違いしている点も多い。
この点もそうで、関数の外(場所A)での記述しか出来ないものだと思っていた。
VC++/CLIのマネージドコードは文法的にはかなり制限されており、彼等的に駄目な書き方が出来なくなっている。
俺はそもそもアクロバティックな書き方はしないし、
他の人が嵌ったから禁止にした、なら、どうせ俺もいつか嵌るから禁止でよい、という感じで、
かなり厳しめのルールでもそんなに不満はない。
ただ、この点についてはメリットは皆無なように思えるので、何故彼等は禁止にした方がいいと考えたのか知りたい。
前述の通り、混在は問題があるにしても、マネージド内のローカルマネージド構造体定義/使用(場所C)は問題ないように思える。
以下のC3156, C3923を仕様とした理由を知りたい。
混在は問題があるにしても、マネージド内のローカルマネージド構造体定義/使用(場所C)は問題ないように思える。
value struct {int offset, int len; }; // OK (場所A)
void somefunc(bool condition){
struct { int offset, int len; } info; // error C3923 (場所B)
value struct {int offset, int len; } info2; // error C3156, C3923 (場所C)
if (condition) {
value struct {int offset, int len; } info2; // error C3156, C3923 (場所D)
}
// (場所E)
}
// C3156: マネージ型のローカル定義を持つことができません。
// C3923: ローカル クラス、構造体、または共用体の定義は、マネージ クラスのメンバ関数では使用できません
今更ながら構造体のローカル定義が出来ることを知った。
いや、元々;必須なのは文法的に妙だとは思っていたが、
関数のように定義と使用を明確に分離しておらず、ローカル定義での使用を主軸とするなら納得ではある。
俺はゴリゴリ書くようになってからはVC++しか使ってないので、VC++で出来ない=Cでも出来ないと勘違いしている点も多い。
この点もそうで、関数の外(場所A)での記述しか出来ないものだと思っていた。
VC++/CLIのマネージドコードは文法的にはかなり制限されており、彼等的に駄目な書き方が出来なくなっている。
俺はそもそもアクロバティックな書き方はしないし、
他の人が嵌ったから禁止にした、なら、どうせ俺もいつか嵌るから禁止でよい、という感じで、
かなり厳しめのルールでもそんなに不満はない。
ただ、この点についてはメリットは皆無なように思えるので、何故彼等は禁止にした方がいいと考えたのか知りたい。
前述の通り、混在は問題があるにしても、マネージド内のローカルマネージド構造体定義/使用(場所C)は問題ないように思える。
935デフォルトの名無しさん (ワッチョイ 8f7b-uiXD)
2020/06/28(日) 12:36:51.85ID:wAVx8sTD0 一応コーディングルールを当たってはみた。
googleのC++コーデングルールでは特に言及無し、つまり普通にローカル構造体定義は使って良いものだと思われる。
https://ttsuki.github.io/styleguide/cppguide.ja.html#Classes
MISRAでは
https://www.ipa.go.jp/files/000045169.pdf
M4.5 宣言の書き方を統一する。
M4.5.2 構造体タグの宣言と変数の宣言は別々に行う。
だからローカル定義ではなく匿名構造体の禁止、型定義と使用を分離、としている。
(しかしいつも思うがMISRAのルールは時代錯誤の物が多いな。
彼等的にはこの中から選んで使う為の物であって、全部を使うものではない
=ゴミが混入していても構わないが、項目がないのは頂けない、らしいが、にしてもゴミが多すぎて駄目だ)
GNUのはこれでいいのか分からないが、スカスカだし言及は無しだ。
https://linuxjf.osdn.jp/JFdocs/kernel-docs-2.6/CodingStyle.html
googleのC++コーデングルールでは特に言及無し、つまり普通にローカル構造体定義は使って良いものだと思われる。
https://ttsuki.github.io/styleguide/cppguide.ja.html#Classes
MISRAでは
https://www.ipa.go.jp/files/000045169.pdf
M4.5 宣言の書き方を統一する。
M4.5.2 構造体タグの宣言と変数の宣言は別々に行う。
だからローカル定義ではなく匿名構造体の禁止、型定義と使用を分離、としている。
(しかしいつも思うがMISRAのルールは時代錯誤の物が多いな。
彼等的にはこの中から選んで使う為の物であって、全部を使うものではない
=ゴミが混入していても構わないが、項目がないのは頂けない、らしいが、にしてもゴミが多すぎて駄目だ)
GNUのはこれでいいのか分からないが、スカスカだし言及は無しだ。
https://linuxjf.osdn.jp/JFdocs/kernel-docs-2.6/CodingStyle.html
936デフォルトの名無しさん (ワッチョイ 8f7b-uiXD)
2020/06/28(日) 12:38:56.27ID:wAVx8sTD0 ちなみにローカル定義を応用してそのメンバ関数をローカル関数みたいに使う、というのがC++の技としてあるようだが、
https://synapse.kyoto/tips/local_func/page001.html
俺に言わせればこれは応用ではなく悪用で、俺はこの類の事は一切しないからこの辺のことも知らなかった。(そもそもマネージドコードではこれは出来ないが)
ただ、今はもうラムダを使えばいいだけだが、
確かにこれで直前にファンクタを定義出来るのだから、ラムダは要らないと禿が最後まで抵抗した(らしい)というのも分かる。
(俺はこれが出来ないと思っていたからラムダは導入して当たり前だと思っていた)
良くも悪くもこの辺はC/C++の柔軟性を発揮している部分ではある。
VC++/CLIはこの辺の過度の柔軟性を削いで、よく言えばきっちりした書き方しか出来ないようにしてある。
俺はそれでいいや、位で居たのだが、今回のこの点に関してはデメリットが見つからないので何故禁止にしたのか疑問だ。
なおJavaScript(の殆ど全員が使っているstrintモード)では、場所Dでの関数『定義』は文法的に禁止とされている。(ラムダはいい)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Strict_mode
http://whereswalden.com/2011/01/24/new-es5-strict-mode-requirement-function-statements-not-at-top-level-of-a-program-or-function-are-prohibited/
俺はこれについても別段、そんなところで関数定義しないからいいや、だった。
これがネイティブC++では(上記応用によって)出来るので、この点ではC++はJSよりも柔軟になってしまっている。
なおJSでの禁止理由はどうやら互換性問題で、原因はJavaScript固有の問題と最適化の合わせ技だから、
C++的には問題ないのかもしれない。
(JSでは関数『定義』は最初に全部評価される為(巻き上げと呼ばれる)、つまり場所Eに書いても動作する為、)
下側URL内最適化時に if (1) を剥がすと後ろの関数が前の関数を上書き定義してしまうようになるようだ)
https://synapse.kyoto/tips/local_func/page001.html
俺に言わせればこれは応用ではなく悪用で、俺はこの類の事は一切しないからこの辺のことも知らなかった。(そもそもマネージドコードではこれは出来ないが)
ただ、今はもうラムダを使えばいいだけだが、
確かにこれで直前にファンクタを定義出来るのだから、ラムダは要らないと禿が最後まで抵抗した(らしい)というのも分かる。
(俺はこれが出来ないと思っていたからラムダは導入して当たり前だと思っていた)
良くも悪くもこの辺はC/C++の柔軟性を発揮している部分ではある。
VC++/CLIはこの辺の過度の柔軟性を削いで、よく言えばきっちりした書き方しか出来ないようにしてある。
俺はそれでいいや、位で居たのだが、今回のこの点に関してはデメリットが見つからないので何故禁止にしたのか疑問だ。
なおJavaScript(の殆ど全員が使っているstrintモード)では、場所Dでの関数『定義』は文法的に禁止とされている。(ラムダはいい)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Strict_mode
http://whereswalden.com/2011/01/24/new-es5-strict-mode-requirement-function-statements-not-at-top-level-of-a-program-or-function-are-prohibited/
俺はこれについても別段、そんなところで関数定義しないからいいや、だった。
これがネイティブC++では(上記応用によって)出来るので、この点ではC++はJSよりも柔軟になってしまっている。
なおJSでの禁止理由はどうやら互換性問題で、原因はJavaScript固有の問題と最適化の合わせ技だから、
C++的には問題ないのかもしれない。
(JSでは関数『定義』は最初に全部評価される為(巻き上げと呼ばれる)、つまり場所Eに書いても動作する為、)
下側URL内最適化時に if (1) を剥がすと後ろの関数が前の関数を上書き定義してしまうようになるようだ)
937デフォルトの名無しさん (ワッチョイ 3f6d-rlK7)
2020/06/28(日) 13:10:05.30ID:h6b+J5yF0 CLI はMSの独自なんで
938デフォルトの名無しさん (ワッチョイ 4f0c-NJGG)
2020/06/28(日) 13:55:21.17ID:pZYvJlSo0 理由も何もコンパイラからもランタイムからも.NETのマネージ型はC++の型とは別物なんだし
それこそ必要も無いから実装しなかっただけでしょ
C++/CLIはC++のMS独自拡張とすら言えない別言語なんで他所でやれ
それこそ必要も無いから実装しなかっただけでしょ
C++/CLIはC++のMS独自拡張とすら言えない別言語なんで他所でやれ
939デフォルトの名無しさん (ワッチョイ 3f6d-rlK7)
2020/06/28(日) 15:24:08.29ID:h6b+J5yF0 正直変なクセが付く前にCLIの使用はやめたほうがいい
940デフォルトの名無しさん (エムゾネ FF43-VqvP)
2020/07/12(日) 10:54:03.57ID:NK7E+AG5F test
941デフォルトの名無しさん (ワッチョイ 4163-HHIp)
2020/07/29(水) 05:13:16.51ID:TK9vaQ550 MATLABの行列計算ってかなり速いですけどC++でfor文書いて計算すると大分遅いですよね
OpenMPとかでfor文を並列にまわしてやっても速度が勝てません
他の言語でできることは全てC++でできると思ったんですけどMATLABとかの高速な計算はどうやって実現しているのでしょうか
OpenMPとかでfor文を並列にまわしてやっても速度が勝てません
他の言語でできることは全てC++でできると思ったんですけどMATLABとかの高速な計算はどうやって実現しているのでしょうか
942デフォルトの名無しさん (ワッチョイ 7a6d-AY8j)
2020/07/29(水) 05:17:10.82ID:FES4Zy4R0 アセンブラー
943デフォルトの名無しさん (ワッチョイ 4d89-Kofa)
2020/07/29(水) 07:33:08.81ID:B7ghAc2E0 matlabは数学的な最適化と機械的な最適化両方やってる。機械的な最適化だけで勝てるわけがない。
944デフォルトの名無しさん (ワッチョイ fa0e-xE3T)
2020/07/29(水) 07:45:45.60ID:8sSsdFab0 つまりMATLABにC++が負けたのではなく
941が負けたってことだな
941が負けたってことだな
945デフォルトの名無しさん (ワッチョイ bd7b-LMHu)
2020/07/29(水) 08:54:20.17ID:GLwqpgEf0 >>941
行列ならCUDA
行列ならCUDA
946デフォルトの名無しさん (ワイーワ2 FF62-lIev)
2020/07/29(水) 10:57:24.17ID:hY/5h1XOF GPU! GPU!
947デフォルトの名無しさん (ワッチョイ 413a-Gwp0)
2020/07/29(水) 12:35:18.65ID:QR93BiuR0 eigenとかlapackとか使えよ
948デフォルトの名無しさん (ワッチョイ fa63-u88n)
2020/07/29(水) 21:01:02.48ID:XutlUt1Q0 boost::asio::ssl::stream<boost::asio::ip::tcp::socket>でHTTPSクライアントを書きました。
boost::asio::ssl::readでレスポンスをぜんぶとると、正常にサーバからレスポンスを受け取れてるのにEOFじゃなくてstream truncateが返ってくるサーバーがある……
socket.read_someで試したけど、結果は変わらず。
疲れたよ。チラ裏でした。
boost::asio::ssl::readでレスポンスをぜんぶとると、正常にサーバからレスポンスを受け取れてるのにEOFじゃなくてstream truncateが返ってくるサーバーがある……
socket.read_someで試したけど、結果は変わらず。
疲れたよ。チラ裏でした。
949デフォルトの名無しさん (ワイーワ2 FF62-QWST)
2020/07/30(木) 16:36:23.43ID:EPvquY9vF950デフォルトの名無しさん (テテンテンテン MM86-SIKU)
2020/10/11(日) 10:11:51.91ID:1qLYjeFPM >>923
それでスレが分裂してるんですか?
それでスレが分裂してるんですか?
951デフォルトの名無しさん (アウアウエー Sa3a-93GU)
2020/11/20(金) 21:29:08.11ID:X5UpGKOpa C++プライマー 第5版って人気ない?
952デフォルトの名無しさん (ワッチョイ bf1f-DOZt)
2020/11/25(水) 10:24:39.48ID:1u62rcpX0 ふとどうでもいいことを疑問に思ったのだが
structureが構造体ならclassは日本語にするとなんだ?
structureが構造体ならclassは日本語にするとなんだ?
953デフォルトの名無しさん (ワッチョイ 9f6d-hVLO)
2020/11/25(水) 11:20:02.68ID:cFWbedaT0 組合
954デフォルトの名無しさん (ワッチョイ bf1f-DOZt)
2020/11/25(水) 12:28:22.84ID:1u62rcpX0 へー
955デフォルトの名無しさん (ワッチョイ 9f61-7vHe)
2020/11/25(水) 12:53:48.33ID:jzvQX9aE0 >>952
類型
類型
956デフォルトの名無しさん (ワッチョイ 9f61-7vHe)
2020/11/25(水) 12:55:36.18ID:jzvQX9aE0 >>955
類似集合
類似集合
957デフォルトの名無しさん (ワッチョイ 9f79-b6o2)
2020/11/26(木) 17:53:04.15ID:rfhyh3I20 今からC++勉強するなら江添本がいいの?
958デフォルトの名無しさん (ワッチョイ 5701-FP8+)
2020/11/26(木) 18:20:34.01ID:xnB0RhUa0 >>948
はてなにでも顛末を書いてくれると、全国2億2000万のBoostユーザーが助かりますね。
はてなにでも顛末を書いてくれると、全国2億2000万のBoostユーザーが助かりますね。
959デフォルトの名無しさん (オッペケ Srcb-tqwb)
2020/12/01(火) 15:53:07.44ID:V2eyqU/tr gdbのプロンプトでシェルの文法使う方法ある?
具体的にはfor文で配列を走査しながら内容をprintしたりしたい
具体的にはfor文で配列を走査しながら内容をprintしたりしたい
960デフォルトの名無しさん (オッペケ Srcb-tqwb)
2020/12/01(火) 15:54:40.11ID:V2eyqU/tr うわ間違えた
正しいスレに移動します
正しいスレに移動します
961デフォルトの名無しさん (ワッチョイ 7a3d-cM6j)
2020/12/31(木) 23:18:49.36ID:ya7PW7y20 質問ですがstd::type_treatsってテンプレートパラメータに自作クラスを入れても動くはずのもの?
具体的にいはstd::is_signed<T>()とか、
具体的にいはstd::is_signed<T>()とか、
963デフォルトの名無しさん (ワッチョイ c2ab-UAPS)
2021/01/01(金) 05:54:42.84ID:DIBn3EXs0 >>961
こゆこと?
struct T {};
template<>struct std::is_signed<T> : std::true_type {};
int main()
{
using namespace std;
cout << boolalpha << is_signed_v<T> << endl;
}
こゆこと?
struct T {};
template<>struct std::is_signed<T> : std::true_type {};
int main()
{
using namespace std;
cout << boolalpha << is_signed_v<T> << endl;
}
964デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/01(金) 22:50:54.41ID:Gp2Do8Ou0 >>963
ちょっと違っており特殊化せずにうまいことやってくれるのかという問いのつもり
つまり
class Foo {
(代入演算子四則演算とunary minusが定義されている)
};
という自作クラスFooがあったとして、実はstd::is_signed<Foo>()がうまいことやってくれてtrue/falseは勝手に決まるのかどうか、という質問
実は符号付きのはずの自作クラスで、エラーになりやがらないのにfalseが返されており
実際のところうまくいってないのですがwwww
ちょっと違っており特殊化せずにうまいことやってくれるのかという問いのつもり
つまり
class Foo {
(代入演算子四則演算とunary minusが定義されている)
};
という自作クラスFooがあったとして、実はstd::is_signed<Foo>()がうまいことやってくれてtrue/falseは勝手に決まるのかどうか、という質問
実は符号付きのはずの自作クラスで、エラーになりやがらないのにfalseが返されており
実際のところうまくいってないのですがwwww
965デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/01(金) 22:52:49.85ID:Gp2Do8Ou0 というわけで特殊化不可避かつstd::type_treatsが自作クラス用の特殊化を認める仕様であるという回答があれば
それはそれで有用な情報という境地に達した、
(実際どう考えてもstd::numeric_limits<T>::max()とかはTが自作クラスなら特殊化不可避のように思える
それはそれで有用な情報という境地に達した、
(実際どう考えてもstd::numeric_limits<T>::max()とかはTが自作クラスなら特殊化不可避のように思える
966デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/02(土) 00:35:56.66ID:f21yM1/d0 ていうかMSVC2019のstd::is_signed<T>()の定義を見ていったら
1. is_integral_v<T>がtrue(Tが整数型)なら((T)-1 < (T)0)の真偽が結果
2. is_integral_v<T>がfalseならis_floating_point_v<T>(Tが浮動小数点型)の真偽が結果
3. 上記のどれにも当てはまらなければfalseが結果
ということのようで、自作クラスがTに入り込む余地は無いぽい(常に必然的に3の結果になる仕様
1. is_integral_v<T>がtrue(Tが整数型)なら((T)-1 < (T)0)の真偽が結果
2. is_integral_v<T>がfalseならis_floating_point_v<T>(Tが浮動小数点型)の真偽が結果
3. 上記のどれにも当てはまらなければfalseが結果
ということのようで、自作クラスがTに入り込む余地は無いぽい(常に必然的に3の結果になる仕様
967デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/02(土) 01:00:19.70ID:f21yM1/d0 というわけでネットに転がっていた「符号を返すテンプレート」signnum<T>は、Tに自作クラスを渡したときエラーにならず
間違った結果を返すというたいへんおっかないブツであることが判明いたので次のようにすた、
template <typename T>
inline constexpr int signnum(T x, std::false_type is_signed) {
(void)(is_signed);
return (T(0) < x);
}
template <typename T>
inline constexpr int signnum(T x, std::true_type is_signed) {
(void)(is_signed);
return (T(0) < x) - (x < T(0));
}
template <typename T>
inline constexpr int signnum(T x) {
// std::is_signed<T>()のTに整数型でも浮動小数点型でもない型を与えるとfalseが返され、
// 事実上意味をなさないため、Tが整数型でも浮動小数点型でもなければbNumericでエラーにする。
constexpr bool bNumeric = (std::is_integral<T>() || std::is_floating_point<T>());
static_assert(bNumeric, "*** ERR ***");
return signnum(x, std::is_signed<T>());
}
いじょ
間違った結果を返すというたいへんおっかないブツであることが判明いたので次のようにすた、
template <typename T>
inline constexpr int signnum(T x, std::false_type is_signed) {
(void)(is_signed);
return (T(0) < x);
}
template <typename T>
inline constexpr int signnum(T x, std::true_type is_signed) {
(void)(is_signed);
return (T(0) < x) - (x < T(0));
}
template <typename T>
inline constexpr int signnum(T x) {
// std::is_signed<T>()のTに整数型でも浮動小数点型でもない型を与えるとfalseが返され、
// 事実上意味をなさないため、Tが整数型でも浮動小数点型でもなければbNumericでエラーにする。
constexpr bool bNumeric = (std::is_integral<T>() || std::is_floating_point<T>());
static_assert(bNumeric, "*** ERR ***");
return signnum(x, std::is_signed<T>());
}
いじょ
968デフォルトの名無しさん (ワッチョイ c2ab-UAPS)
2021/01/02(土) 06:01:56.33ID:4Im5elX80 (void)(is_signed);
↑
これの意図は?
↑
これの意図は?
969デフォルトの名無しさん (ワッチョイ c2ab-UAPS)
2021/01/02(土) 06:16:06.20ID:4Im5elX80 SFINAEでこうやっとけばよくね?
template <typename T> inline constexpr
auto signnum(T x) -> std::enable_if_t<std::is_signed_v<T>, bool>
{
return x < T(0);
}
template <typename T> inline constexpr
auto signnum(T x) -> std::enable_if_t<std::is_signed_v<T>, bool>
{
return x < T(0);
}
970デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/02(土) 11:32:04.22ID:f21yM1/d0971はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 453e-UAPS)
2021/01/02(土) 12:48:41.87ID:rf+zWHQf0 >>964
std 内の定義の特殊化は「標準ライブラリの要件を満たす限り」という制限の範囲で許されている。
https://timsong-cpp.github.io/cppwp/n3337/namespace.std
仕様で偽値を返す場面を真値に変更するような特殊化は許されていないってこと。
(最新の仕様ではもっと厳しい制限がついてる。)
std::is_signed に関して仕様に反せずに自作クラスが真を返すということはあり得ないので
自前で特殊化しては駄目。
std::numeric_limits を特殊化する分にはアリ。
std 内の定義の特殊化は「標準ライブラリの要件を満たす限り」という制限の範囲で許されている。
https://timsong-cpp.github.io/cppwp/n3337/namespace.std
仕様で偽値を返す場面を真値に変更するような特殊化は許されていないってこと。
(最新の仕様ではもっと厳しい制限がついてる。)
std::is_signed に関して仕様に反せずに自作クラスが真を返すということはあり得ないので
自前で特殊化しては駄目。
std::numeric_limits を特殊化する分にはアリ。
972デフォルトの名無しさん (ササクッテロ Spf1-vWRd)
2021/01/02(土) 13:42:23.47ID:Xp6P49Q4p973デフォルトの名無しさん (ワッチョイ 06e9-Zovn)
2021/01/02(土) 14:26:55.99ID:yNAtJK6O0 >>970,972
使わない引数は仮引数名を書かないのがいい。
使わない引数は仮引数名を書かないのがいい。
974はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 063e-UAPS)
2021/01/02(土) 22:36:02.03ID:sXf7WaOy0 予約とか互換性の都合とかで残っているだけの仮引数なら名前を付けないほうがいいけど、
この場合はむしろ (関数内では) 使ってないからこそ用途を表す名前は付いていて欲しいけどな。
このあたりは感覚的な話かも。
この場合はむしろ (関数内では) 使ってないからこそ用途を表す名前は付いていて欲しいけどな。
このあたりは感覚的な話かも。
975デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/02(土) 23:09:40.00ID:f21yM1/d0 仮引数は削ってしまってから後悔したことが多い希ガス
仮引数を文字列としては残すがいちいちコメントアウトするというのも作業性が落ちるし
だいたいCと共用するヘッダファイルでは仮引数名を削ることはできない
よって削らな〜い☆彡
仮引数を文字列としては残すがいちいちコメントアウトするというのも作業性が落ちるし
だいたいCと共用するヘッダファイルでは仮引数名を削ることはできない
よって削らな〜い☆彡
976デフォルトの名無しさん (ワッチョイ c2ab-UAPS)
2021/01/03(日) 06:56:16.12ID:qsZZ3Tgb0977デフォルトの名無しさん (ワッチョイ c2ab-UAPS)
2021/01/03(日) 06:57:29.24ID:qsZZ3Tgb0 >>970
だったら、これでええやん
template <typename T>
inline constexpr int signnum(T x, std::false_type) {
return (T(0) < x);
}
だったら、これでええやん
template <typename T>
inline constexpr int signnum(T x, std::false_type) {
return (T(0) < x);
}
978デフォルトの名無しさん (ワッチョイ ed79-vWRd)
2021/01/03(日) 08:39:39.79ID:spQgk+t90 >>971
真偽値なのに仕様に反せず特殊化するのは不可能ということで特殊化ダメ、って考えたんだろうけど
特殊化して本来の動作が全く変わらない、なんてのが有り得るのか?(あるとしてもやる意味が無い
仮に自作クラスの型で完全特殊化しても、元の動作とは異なる動作を生むわけだから
requirementsの意味がよくわからん
真偽値なのに仕様に反せず特殊化するのは不可能ということで特殊化ダメ、って考えたんだろうけど
特殊化して本来の動作が全く変わらない、なんてのが有り得るのか?(あるとしてもやる意味が無い
仮に自作クラスの型で完全特殊化しても、元の動作とは異なる動作を生むわけだから
requirementsの意味がよくわからん
979デフォルトの名無しさん (ワッチョイ 814f-Iopg)
2021/01/03(日) 09:14:35.48ID:myNdCsmw0 >>975
使わない仮引数を削ると言ったらふつうヘッダでやる話じゃないだろう。
>仮引数を文字列としては残すがいちいちコメントアウトするというのも作業性が落ちるし
作業性は使うツールにもよるね。VSだったらダブルクリックで仮引数名を選択して
コメントアウトボタン押すだけの2ステップ。
使わない仮引数を削ると言ったらふつうヘッダでやる話じゃないだろう。
>仮引数を文字列としては残すがいちいちコメントアウトするというのも作業性が落ちるし
作業性は使うツールにもよるね。VSだったらダブルクリックで仮引数名を選択して
コメントアウトボタン押すだけの2ステップ。
980デフォルトの名無しさん (ワッチョイ 797b-s4wZ)
2021/01/03(日) 11:55:07.33ID:W81TgN5I0 C++相談室 part153
https://mevius.5ch.net/test/read.cgi/tech/1602339500/
https://mevius.5ch.net/test/read.cgi/tech/1602339500/
981はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 063e-UAPS)
2021/01/03(日) 14:19:53.78ID:/m8P2Sw00 >>978
いや、標準が提供するのは std::type_traits のような副作用のない判定用メタ関数だけではない。
例でたまに出てくるのは std::swap を効率化するというような話とか。
ムーブで効率的に入れ替えてはくれるけど、
クラスの特性によっては入れ替えのときに限ってもっと効率的にやれるかもしれない。
入れ替えるという結果が同じなら仕様に反しないし、
効率的にやれるなら特殊化する価値はある。
調べてもやり方の例としては出てくるものの具体的に効率的になる例は見つからんかったんだが。
実用的な例としてはアロケータの特殊化。
今では std::allocator ではなく std::allocator_traits を特殊化する形が推奨されているけど、
いずれにしても特殊化でやる前提で用意されている機能。
いや、標準が提供するのは std::type_traits のような副作用のない判定用メタ関数だけではない。
例でたまに出てくるのは std::swap を効率化するというような話とか。
ムーブで効率的に入れ替えてはくれるけど、
クラスの特性によっては入れ替えのときに限ってもっと効率的にやれるかもしれない。
入れ替えるという結果が同じなら仕様に反しないし、
効率的にやれるなら特殊化する価値はある。
調べてもやり方の例としては出てくるものの具体的に効率的になる例は見つからんかったんだが。
実用的な例としてはアロケータの特殊化。
今では std::allocator ではなく std::allocator_traits を特殊化する形が推奨されているけど、
いずれにしても特殊化でやる前提で用意されている機能。
982デフォルトの名無しさん (ワッチョイ 6f1f-mBT+)
2021/02/23(火) 10:31:30.19ID:anF8SsN/0 void somefunc(const int& a){...}
こんな感じの関数に
somefunc(0);だとうまく行かないが
const int hoge = 0;
somefunc(hoge);ならうまくいくんだが
somefunc(0)でエラーも警告も出ないのは仕様?
こんな感じの関数に
somefunc(0);だとうまく行かないが
const int hoge = 0;
somefunc(hoge);ならうまくいくんだが
somefunc(0)でエラーも警告も出ないのは仕様?
983デフォルトの名無しさん (ワッチョイ 6fe9-W5tZ)
2021/02/23(火) 10:33:48.47ID:IoYWawP80 はい。
それで「うまく行かない」ってどういう状況なんでしょうね?
それで「うまく行かない」ってどういう状況なんでしょうね?
984デフォルトの名無しさん (ワッチョイ 6f1f-mBT+)
2021/02/23(火) 10:35:20.19ID:anF8SsN/0 関数入った瞬間に0インスタンスが消えるかして
関数の中で変な値になっとる
(最適化Os)
関数の中で変な値になっとる
(最適化Os)
985デフォルトの名無しさん (ワッチョイ 6f1f-mBT+)
2021/02/23(火) 10:37:41.60ID:anF8SsN/0 上の表現は正確じゃないな
class A{const int& hoge;public: A(const int& hoge):hoge(hoge){} void somefunc(){...} };
A a(0); a.somefunc(); // なんか変な値になってる
const int hoge = 0; A a(hoge); a.somefunc(); // 正しい挙動になる
class A{const int& hoge;public: A(const int& hoge):hoge(hoge){} void somefunc(){...} };
A a(0); a.somefunc(); // なんか変な値になってる
const int hoge = 0; A a(hoge); a.somefunc(); // 正しい挙動になる
986デフォルトの名無しさん (ワッチョイ 6fe9-W5tZ)
2021/02/23(火) 10:37:55.22ID:IoYWawP80 最適化されたコードをデバッガで見て変な値が見えるという話なら、そんなこともあるだろうとしか。
987デフォルトの名無しさん (ワッチョイ 6fe9-W5tZ)
2021/02/23(火) 10:41:26.23ID:IoYWawP80 >>985
それは仕様どおり。 A a(0) に渡された const int& の指すオブジェクトは一時オブジェクトで、寿命は ; まで。
それは仕様どおり。 A a(0) に渡された const int& の指すオブジェクトは一時オブジェクトで、寿命は ; まで。
988デフォルトの名無しさん (ワッチョイ 6f1f-mBT+)
2021/02/23(火) 10:44:06.65ID:anF8SsN/0989デフォルトの名無しさん (ワッチョイ 6f1f-mBT+)
2021/02/23(火) 10:47:45.54ID:anF8SsN/0 いや、参照で保持するのをやめればいいだけの話だった
すっきりした、ありがとうございます
すっきりした、ありがとうございます
990デフォルトの名無しさん (スッップ Sd33-55sF)
2021/03/24(水) 07:43:19.28ID:PNXF+EC1d991デフォルトの名無しさん (ワッチョイ 13ad-zgiT)
2021/03/24(水) 13:35:18.40ID:uPqg/PBu0 寿命つまりスコープを制御したいなら、{}で囲めばok
992デフォルトの名無しさん (ワッチョイ cb45-9/J3)
2021/05/08(土) 09:21:32.08ID:St3wXYGV0 固定小数点を作ろうとしててさ
struct fix
{
int minor, major;
friend auto operator <=> (const fix& lhs, const fix& rhs) = default;
};
int main()
{
fix a{1, 2};
fix b{2, 1};
cout << boolalpha;
cout << (a < b) << endl; //true
cout << (a > b) << endl; //false
}
俺はまだ大小関係を定義してないのに勝手に何かぬかしてるようなんだけど
= default; が邪魔で定義できない
どうすればいい?
struct fix
{
int minor, major;
friend auto operator <=> (const fix& lhs, const fix& rhs) = default;
};
int main()
{
fix a{1, 2};
fix b{2, 1};
cout << boolalpha;
cout << (a < b) << endl; //true
cout << (a > b) << endl; //false
}
俺はまだ大小関係を定義してないのに勝手に何かぬかしてるようなんだけど
= default; が邪魔で定義できない
どうすればいい?
993デフォルトの名無しさん (ワッチョイ 437b-HsZ9)
2021/05/08(土) 21:31:17.88ID:9lKegb3f0 >>992
> 固定小数点を作ろうとしてて
この時点で既におかしい
後は向こうでどうぞ
C++相談室 part155
https://mevius.5ch.net/test/read.cgi/tech/1616555235/
> 固定小数点を作ろうとしてて
この時点で既におかしい
後は向こうでどうぞ
C++相談室 part155
https://mevius.5ch.net/test/read.cgi/tech/1616555235/
994デフォルトの名無しさん (ワッチョイ cb45-9/J3)
2021/05/08(土) 21:43:34.99ID:St3wXYGV0995デフォルトの名無しさん (ワッチョイ bb4f-DjaX)
2021/05/08(土) 22:16:16.65ID:L+qXSIbq0 >>992
= defaultって書いたからその通り動作しているだけだと思うが?言ってることが支離滅裂。
= defaultって書いたからその通り動作しているだけだと思うが?言ってることが支離滅裂。
996デフォルトの名無しさん (ワッチョイ cb45-9/J3)
2021/05/08(土) 22:34:51.84ID:St3wXYGV0 >>995
その通りとは?
その通りとは?
997デフォルトの名無しさん (ワッチョイ 2fe5-derf)
2021/05/09(日) 04:24:19.93ID:sKwNJeAm0998デフォルトの名無しさん (ブーイモ MMd6-HO9V)
2021/05/09(日) 22:17:31.30ID:pcL7xDKPM >>996
こいつ日本語も不自由?哀れ
こいつ日本語も不自由?哀れ
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★4 [Hitzeschleier★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- コウメ太夫のネタ考えたから評価してくれ
- トランプ、G7に代わるcore 5を発表 [805596214]
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- vipこのままでいいの?なんか盛り上げる方法ないの?
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
