1 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 22:58:02.60 ID:dU5z27As.net] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用) 前スレ 【初心者歓迎】C/C++室 Ver.99【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1469177649/
596 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 10:35:04.67 ID:k0RY104y.net] >>585 C++と互換性のないCってどんなの?
597 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 19:40:11.14 ID:IM5122PI.net] ベターC的な所全般だな 範囲forとか2進リテラルとかスレッドライブラリとか参照とか Cにはnullptrすら無いし細かいところでは条件演算子が右辺値とか ようするに別言語 オーバーロードに対するtgmathとかもう糞の臭いしかしない
598 名前: ◆QZaw55cn4c mailto:sage [2017/04/05(水) 19:44:22.68 ID:bDXscs5n.net] >>585 たしかに,C99 の数々の改悪は C++ との互換性を考慮していない悪手の連発,ほとほと困ってしまう >>584 C++ とほどほどの交換性のある C89 が最良だよ
599 名前: ◆QZaw55cn4c mailto:sage [2017/04/05(水) 19:46:32.21 ID:bDXscs5n.net] >>580 「K&R1 は構造体は基本的にポインタでしか扱えない」制限なんて,使ってもいなかったらわからないだろう?
600 名前:580 mailto:sage [2017/04/05(水) 20:02:06.85 ID:DVg/5L4N.net] え?Qちゃんてサンデープログラマじゃないの? 職業プログラマでもないし プログラミング暦せいぜい10年未満だと思ってた
601 名前: ◆QZaw55cn4c mailto:sage [2017/04/05(水) 20:07:28.87 ID:bDXscs5n.net] >>579 >「forループ?本質はgotoと同じ」 そんなことはいわないとおもうよ,K&R1 の時代から for はあるしね きがつくと for(;;) { } と break だけで書いてたりするのはあるかもね,while 使いにくいとか,do while なんかマクロの中でしかつかわない,とかさ enum? #define でいいとおもうよ‥
602 名前: ◆QZaw55cn4c mailto:sage [2017/04/05(水) 20:08:45.69 ID:bDXscs5n.net] >>590 サンデーだよ でも長いサンデーなんだ‥
603 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 21:26:45.75 ID:Kw8eDt7v.net] ニートじゃ分からんことも多いのでは
604 名前: ◆QZaw55cn4c mailto:sage [2017/04/05(水) 22:05:58.72 ID:bDXscs5n.net] たしかにそのとおりだが,K&R2 = C89 こそ必要十分,ということはわかるよ
605 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 22:10:26.67 ID:mGFW5fgT.net] そういうこと言ってるとそのうち技術についていけなくなるよ
606 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 22:22:23.34 ID:ncDYJBnp.net] C99やC11って、新しい技術とかそういうんじゃないじゃん。
607 名前:デフォルトの名無しさん mailto:sage [2017/04/05(水) 22:40:44.77 ID:mGFW5fgT.net] 規格
608 名前:デフォルトの名無しさん mailto:sage [2017/04/06(木) 10:47:58.81 ID:jz0x7tjm.net] 企画ものは好きじゃないからな
609 名前:デフォルトの名無しさん mailto:sage [2017/04/06(木) 16:35:26.64 ID:w+UX2Wix.net] ころころ変わるんだから最新もクソも無いわけだが pakomamaはガチらしいな
610 名前: ◆QZaw55cn4c mailto:sage [2017/04/06(木) 20:02:44.92 ID:Uar4T1Gl.net] >>595 別についていけなくてもいいよ,その殆どは自分には要らないものだから それはそうと,これは!とおもう新しい技術って最近はどんなものがあるの?
611 名前:デフォルトの名無しさん mailto:sage [2017/04/06(木) 20:16:13.94 ID:kFToYptL.net] まず、C#のasyncだのawaitだのはC++にも欲しいところ というか、取り入れる方向で議論していたような どのみちQZには使いこなせない機能だから知らなくてもよいけど 知れば発狂することだろう
612 名前: ◆QZaw55cn4c mailto:sage [2017/04/06(木) 20:21:15.74 ID:Uar4T1Gl.net] まずC#をやらないとね‥でも Java に走ってしまった‥Java に同じようなのはないの?
613 名前:デフォルトの名無しさん [2017/04/06(木) 22:33:11.66 ID:Ao1zg6OQ.net] >>601 coroutineの事なら根本的な所が違うから勘違いしないようにな
614 名前:デフォルトの名無しさん mailto:sage [2017/04/07(金) 20:08:34.35 ID:cdWiLUH2.net] 馬鹿の特長:目的/機能の違いと実現するための実装の違いの区別がつかない
615 名前:デフォルトの名無しさん mailto:sage [2017/04/08(土) 12:56:12.29 ID:TFmwEDa6.net] C#のawaitはGUIのスレッドを意識出来るので有用だが C++のawaitはただ裏で走らせるだけの機能的には劣化版な気がしてならない
616 名前:デフォルトの名無しさん mailto:sage [2017/04/08(土) 13:14:20.88 ID:bfo0YVHI.net] >>605 c++で標準的なgui使うとすると何になるの?
617 名前:デフォルトの名無しさん mailto:sage [2017/04/08(土) 13:49:52.49 ID:xnWSKOe7.net] >>605 そりゃ C++ と C# のポリシーの違いだろ
618 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 22:32:13.26 ID:nTEmq1X3.net] C使ってる人で変数宣言を途中に書く人いる? やめた方がいい?
619 名前:デフォルトの名無しさん mailto:sage [2017/04/09(日) 23:00:21.55 ID:gthRNL4S.net] むしろそうして欲しいかな 勿論ブロックスコープは意識してる前提で
620 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 09:11:56.63 ID:ezi5K97R.net] 初期のCはブロック先頭しかコンパイルが通らない コンストラクタも型推論もないのに途中に置くメリットが少ない 初期化漏れというモンスターの隠れ家になりやすい
621 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 10:33:55.73 ID:L6e5ZQwW.net] 一応Cで書くときは関数ブロック直後に書いてるけど、それはそれでforで使うiとかを使い回す事になるから、C++みたくプログラマの良識を信じて(ブロックを意識して変数宣言すると信じて)、好きな場所で宣言出来た方が正解なんだろうな。
622 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 10:35:17.63 ID:L6e5ZQwW.net] 出来た方がと言うか、今は出来るんだから、した方が正解に訂正。
623 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 12:59:25.70 ID:Hdztr2ik.net] 出来ることと乱用していいことはイコールでない 一瞬だけの一時変数を直前で宣言するのならありだけど 関数全体で使うなら頭で宣言すべきだし、そもそも中間で宣言するような長い関数は 短くなるよう見直すべき
624 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 13:04:43.28 ID:xSRtCFhF.net] 魔法の言葉 ケースバイケース
625 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:32:18.15 ID:UiWlchtO.net] スコープは可能な限り狭く おじいちゃんの遺言
626 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:38:55.23 ID:PNQsiXg9.net] 初期化漏れはブロック先頭でしかかけない方が起こしやすいだろう 長い範囲で使う変数でも、変数ははじめて使うところで宣言した方が分かりやすいしバグも減る。
627 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:04:35.98 ID:Z/bjVn5R.net] 初期化忘れ防止はどこで宣言したってあんま関係ないというか 大差ないだろうな実際 必要になった時点で宣言するってことでよいと思う さもないと上手くいかない場合もあるし いちいち使いもしない「ダミーの値」で初期化するのは馬鹿らしいし 余計にバグりそう
628 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:13:31.25 ID:Z/bjVn5R.net] auto result = func(); まぁこういう風にしたいわな int result = 0; ・・・ result = func(); ↑その「0」って初期化値は何なんですか、何を意味した「0」なんですか では0の代わりに1で初期化したらどうなるんですか この初期化値の意味は一体何なんですか ってことになるしな 結局「0」とか「1」とかの初期化値はダミーでありプログラム上なんの意味もなかったりするし 逆に初期化値に意味がある場合もあるから余計にややこしくなる bool flag = false; if( func() ) { flag = true; } これらを区別したいから必要になった個所で宣言に一票
629 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 21:45:43.28 ID:spQE74XB.net] 老人の「昔は良かった」を見て顔真っ赤にして論破しようとマジレス みっともない
630 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 23:47:26.34 ID:9eRQSDOY.net] 必要なものを必要なときに宣言する それだけの話
631 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 09:16:54.52 ID:RtikNDCG.net] >>618 >この初期化値の意味は一体何なんですかってことになるしな 勝手に無駄な初期化しておいてどれだけ頭が悪いんだぜ ぜんぜややこしくない お前が馬鹿なだけ
632 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 09:26:22.77 ID:Af1/s0zG.net] もともとが 初期化忘れを防ぐためには関数の先頭で宣言〜 への反論だったからだぜ
633 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 09:41:32.48 ID:RtikNDCG.net] >622 日本語もわからないチンパンは無理して コンピュータ使わなくても 祖国でオナニーしてればいいんだぜ
634 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 09:50:31.14 ID:Af1/s0zG.net] 君の疑問がどこにあるのか本当にわからないからどうでもよい
635 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:02:51.76 ID:Af1/s0zG.net] それでもヒントとして>>610 への反論だったということだけは言っておこうか 「途中で宣言すると初期化もれしやすい」という風なことが書いてあるが 逆に>>610 は何故、先頭で宣言したら初期化漏れしにくい、と考えたか どういったコードを想定しているかってことだな 要するに>>610 はブロックや関数の先頭だけ見れば初期化漏れしていることが直ぐわかると便利だね って言いたいんだろうけど、それはどういうコーディングルールの元に言えることか ということだな
636 名前: ◆QZaw55cn4c mailto:sage [2017/04/16(日) 17:51:30.33 ID:3PeEvH/A.net] for(int i = ...; ; ) が書けるようになったのは素直にありがたいな,と感じている
637 名前:デフォルトの名無しさん mailto:sage [2017/04/23(日) 23:52:45.18 ID:IUq/7GPJ.net] >>626 脳の進化が20年前で止まったチンパンはc89でも使ってろ
638 名前:デフォルトの名無しさん mailto:sage [2017/04/24(月) 20:45:20.10 ID:et30sNFg.net] うきー
639 名前: mailto:sage [2017/04/25(火) 04:20:41.84 ID:Vqnsayjn.net] >>627 C99 or later で便利になったことなんて,そんなにないんだよね‥
640 名前:デフォルトの名無しさん mailto:sage [2017/04/25(火) 06:08:12.88 ID:X14wy5zc.net] 数値計算とか特殊用途なライブラリ追加ってイメージ。 そりゃ、手間の割に汎用性がなかったら対応コンパイラも出てこないわ。
641 名前:デフォルトの名無しさん mailto:sage [2017/04/25(火) 22:55:58.60 ID:EbISA0IE.net] インライン関数も行コメントもboolもrestrict も無しで どうやってプログラム書いてんのか想像もつかない snprintf無しとか無理ゲーだろ
642 名前:デフォルトの名無しさん mailto:sage [2017/04/26(水) 02:18:40.34 ID:Kw1ZNGm3.net] restrict無しが想像つかないってどういうことだろ
643 名前:デフォルトの名無しさん mailto:sage [2017/04/26(水) 09:07:13.88 ID:bRGeq+mw.net] restrict使ったことないなあ 大きく最適化されるの?
644 名前:デフォルトの名無しさん mailto:sage [2017/04/26(水) 09:13:52.17 ID:rDz6/6sg.net] 最適化はあんま気にしてなくて意味的なものかな memcpyとmemmoveみたいな
645 名前:デフォルトの名無しさん mailto:sage [2017/04/26(水) 09:20:57.15 ID:A4NmaPdj.net] そう言う機能はメーカー独自実装でC99決まるずっと前からスタンダードだったから、C99って実感が無い。。。
646 名前:デフォルトの名無しさん mailto:sage [2017/04/26(水) 11:36:23.97 ID:O9yeoh6Z.net] >>631 いやいやそれはさすがに想像力足りなくね? snprintf無しは無理ゲーなのは同意するが
647 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 00:51:04.53 ID:evlI6rq7.net] void func(hoge) int hoge; {} こんな書き方があったん?
648 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 01:30:10.63 ID:PzvORh1V.net] >>637 詳しくは k&r style とかでググればいいけど今時知る必要はほぼないと思う
649 名前:デフォルトの名無しさん mailto:sage [2017/05/05(金) 15:05:47.25 ID:9iyukdGg.net] K&R1 だね、引数の型チェックができないから不便かつミスを誘発しやすい
650 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 00:55:58.17 ID:uDdo3knt.net] 使われなくなった過去の異物に優劣語り出すとか 老人やべーな
651 名前:片山博文MZ mailto:sage [2017/05/07(日) 00:58:01.39 ID:gTai4K61.net] ×異物 ○遺物
652 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 01:41:21.28 ID:zkvqzaCu.net] 誰も優を語ってない訳だが
653 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 15:54:40.58 ID:s2OM55fz.net] ストラウストラップの本って読む価値ありますか?
654 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 22:28:38.36 ID:fUCVOwEA.net] 著書全般の基本的な傾向としては万人向けの価値はない 物事の意味や本質を学び考え悩み理解しようとする人向けの本であって うわべだけの丸暗記やコピペで即結論や結果を求める人向けの本ではないから
655 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 22:36:06.44 ID:f9jMnLHr.net] 読む価値はあるが嘘が多いので騙されない注意が必要
656 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 23:30:36.93 ID:s2OM55fz.net] >>644 >>645 上級者向けの本みたいなので 買うのは先に延ばしたいと思います... 一冊高いのもありますが サンクスです
657 名前:デフォルトの名無しさん mailto:sage [2017/05/19(金) 15:26:03.09 ID:49hF9eg/.net] はぁ〜〜〜〜 安易にC++に手を出すんじゃなかった
658 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 12:15:32.26 ID:Niypv3FQ.net] 変人や御用達の言語だからな 馬鹿のくせにプライド高い老害しか使ってないイメージ
659 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 12:51:51.67 ID:Nls5mnQ9.net] >>648 その手の人らの声が大きいだけだよ。特にこんなところでは。
660 名前:デフォルトの名無しさん mailto:sage [2017/05/20(土) 18:23:23.08 ID:PYbACk+S.net] みんな黙ってC++だよ
661 名前:デフォルトの名無しさん mailto:sage [2017/05
] [ここ壊れてます]
662 名前:/23(火) 00:42:13.85 ID:9/IkIyOw.net mailto: ちょっとした確認なんだけどさ、 デストラクタが空っぽ (デフォルトデストラクタ) でもオブジェクトを後始末するための何らかの処理はするよね? よくあるスライシングの問題で、 ・クラス A をクラス B が継承している ・クラス A のデストラクタは virtual が付いていない ・クラス B のデストラクタはデフォルトデストラクタ ・クラス B はメンバ変数を持っていない ・B* を A* にキャストしたものを delete という状況だと見かけ上はクラス B のオブジェクトには後始末すべきものは何もないように見えるけど、 デストラクタが呼ばれないのはやっぱあかんよな? [] [ここ壊れてます]
663 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 04:48:39.03 ID:pt6Ia/HA.net] うん
664 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 09:20:18.86 ID:J4YcG+3k.net] >>651 はい 規格上もデストラクタがvirtualでないBのオブジェクトをA*に入れてdeleteした場合未定義動作だよ
665 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 10:48:08.30 ID:Ip/q9ayQ.net] 未定義動作多すぎだなこの言語。 よくここまで生き残れたな。
666 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 11:01:35.25 ID:3W0XlzKr.net] 未定義部分を各社が好きに定義してたからね。 VC++だとこう動くけど、g++だとこう動く、みたいな。
667 名前:デフォルトの名無しさん [2017/05/23(火) 12:45:18.14 ID:hcbwXZ+h.net] >>653 横からだけど、それまじ? 出来れば、規格で書かれてる場所教えて欲しい。 不安に思いながらも、一個作っちゃったんだよな… 動作確認済みだから、直ちに問題があるわけではないんだけど、未定義と聞くと将来的には修正しておきたい…
668 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 13:25:39.67 ID:I6yYOIGb.net] >規格で書かれてる場所教えて欲しい delete式の説明の最初のページに書かれていることが探せないというのは 場所を教えられたところでそもそも規格を保有していないのではないか
669 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 13:25:57.75 ID:YY4qnA2y.net] >>656 意図して作ったの?バグじゃなくて?
670 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 15:16:19.75 ID:0tdmeFKn.net] htmlとその解釈に悩まされるよりはマシ
671 名前:653 mailto:sage [2017/05/23(火) 15:21:53.55 ID:Ek6JChT/.net] >>656 俺もworking draftしかないけどn3690の5.3.5の3段落目 In the first alternative (delete object), if the static type of the object to be deleted is different from its dynamic type, the static type shall be a base class of the dynamic type of the object to be deleted and the static type shall have a virtual destructor or the behavior is undefined.
672 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 17:00:54.34 ID:EZJXMIkJ.net] C++があまりに不安な要素をたくさん抱えているお陰で未だに新生言語が多数出てくると 思えばいいじゃん?
673 名前:デフォルトの名無しさん mailto:sage [2017/05/23(火) 19:47:58.75 ID:rsJqfxq0.net] 継承すんなよ
674 名前:デフォルトの名無しさん [2017/05/24(水) 00:55:48.61 ID:WEdzXALv.net] >>658 意図して作った。 悪しき方法とは思いつつも、stringクラスにsprintf 的な機能のメンバ関数作ったった。 その時、stringクラスの全機能を実装するのがめんどくさかったんで public 継承で。 メモリレイアウトは一切変わらない事を見切った上でだが、未定義だとすると…ヤベ。
675 名前:デフォルトの名無しさん [2017/05/24(水) 00:56:49.58 ID:WEdzXALv.net] ん、まあ、deleteは使わないからセーフか?
676 名前:デフォルトの名無しさん [2017/05/24(水) 01:00:58.95 ID:WEdzXALv.net] >>657 ドラフトしか持ってない… delete 使う事は頭になかったから気付かなかった。 ありがとう。 >>660 おぉ、ピンポイント情報あざす。早速確認してみる。
677 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 12:01:47.91 ID:/RGvDc8r.net] メモリレイアウトが変わらない範囲で既存のクラスを再オープンして機能を追加する方法の提案だけは出てたような気がする。
678 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 12:06:31.74 ID:/RGvDc8r.net] >>663 例外関連のなんたらかんたらの処理 (stack unwinding) がかかわってくるんじゃなかったっけ。 正常系では普通に動いているように見えても何がどうなってるかわからんぞ
679 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 13:51:37.65 ID:OqDgfclu.net] >>658 の話の場合、別に”string *のポインタで”継承したやつをdeleteしない限り大丈夫でしょ >>651 で言うところの ・B* を A* にキャストしたものを delete これが問題になるんであって B*からdeleteして中身もBなら問題にならないと思うけど
680 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 14:15:44.36 ID:ttKQmf2U.net] >>668 std::vector<std::string>に入れたら死ぬってことだよね??
681 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 14:47:39.17 ID:/RGvDc8r.net] >>669 ポインタを std::string* に入れてなおかつそれを std::string* のままで delete したらあかんという話。 値を std::string にキャストする分にはなにも問題はない。
682 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 15:58:36.11 ID:ttKQmf2U.net] >>670 だからstd::vector<std::string>にいれらんないよね?
683 名前:デフォルトの名無しさん mailto:sage [2017/05/24(水) 17:02:32.05 ID:/RGvDc8r.net] >>671 何を言いたいのかよくわからんが……。 std::string を継承した型は、レイアウトが変わらないようにしたからと言って (キャストなしで) std::string には入らないよ。 言いたいことを具体的にコードで示してくれんか
684 名前:デフォルトの名無しさん mailto:sage [2017/06/03(土) 20:46:07.15 ID:/cDPk3Lb.net] >>672 ideone.com/akrJQA
685 名前:デフォルトの名無しさん [2017/06/04(日) 05:01:25.52 ID:a4MXR2y0.net] テンプレート構造体を作りその配列をクラスのメンバに含めたいのですが上手くいきません。 作りたいクラスはスタックとして使えるもので、 主な作りたいメンバは、二つの型のメンバ変数を持つ上記のテンプレート構造体の配列。 引数としてテンプレート構造体を持ち、上記の配列に順次プッシュしていく関数。 最後にプッシュされた構造体をポップする関数、という3つです。 どのようにすればテンプレート構造体をクラスのメンバにすることが出来るのでしょうか? もしくは、このような機能を持つクラスを実装するためにはどうすればいいのでしょうか? よろしくお願いします。
686 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 08:23:07.29 ID:7To+hzFq.net] まず using テンプレート構造体の型 = 構造体テンプレート<型パラメーター>; をします
687 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 11:02:02.70 ID:4s9JqZC9.net] >>674 ideon.com/EmULAG
688 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 11:02:24.41 ID:4s9JqZC9.net] ideone.com/EmULAG
689 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 21:12:43.78 ID:0J0aNZ4Z.net] 質問への回答はいいとして たった100行のコードによくもここまでUNKOを詰め込めるものだと感心
690 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 21:24:21.29 ID:4s9JqZC9.net] >>678 どこ?教えて
691 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 22:06:48.73 ID:0J0aNZ4Z.net] >>679 細かくは見てないがぱっと見て気になったのは、 殆どが「= default」で済むものを自前で定義する所とか K,Vの左辺値が渡せないunkoコンストラクターとか 左辺値が渡せないpush関数とか key_value_pair_stackの外で定義されたdefault_max_sizeとか 禁断の「value_type pop()」とか ムーブ代入だけ何故か無いとか 例外安全を考慮しないswapとか constexprの付いていない関数が多数とか constが付いていないsize関数とか 質問者が「テンプレート構造体」と「クラス」の言葉を使い分けているのにわざわざクラステンプレートにする所とか 「value_type::value_type」の二つのvalue_typeの意味が違うとか スワップする気皆無の「swap(key_value_pair&& other)」とか あと 何故付いているのかわからない「const auto」のconstとか キーバリューペアをシーケンシャルコンテナーに詰める例も地味にUNKO
692 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 22:21:08.74 ID:4s9JqZC9.net] >>680 ありがとう 見直してみる
693 名前:デフォルトの名無しさん mailto:sage [2017/06/04(日) 23:59:40.42 ID:4s9JqZC9.net] >>680 の指摘を受けて修正したやつ https://ideone.com/4PDU5a
694 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 07:13:59.57 ID:dSqD3vhj.net] >>682 20秒ほど眺めたがとりあえず3つほどなおした方がいい ・key_のメンバー宣言に{}が付いていないと、修正前と同じ動作にならない ・popの戻りはvoidにした方が無難 ・clear()しても要素のデストラクターが呼ばれないのでstatic_assert(std::is_trivial_destructible<element_type>::value,"未対応")しとくのが礼儀
695 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 08:02:20.82 ID:SbeuyTlX.net] >>683 一つ目だけ意味がわからない…28行目のこと??なんで?
696 名前:デフォルトの名無しさん mailto:sage [2017/06/05(月) 08:16:13.98 ID:dSqD3vhj.net] >>684 その通り28行目 struct X { some_type m1 /* {} */; X() = default; }; ここでsome_typeの初期化{}が無いとm1は未初期化になるし、 some_typeにデフォルトコンストラクターが無ければX()の「=default」が「=delete」扱いになる