1 名前:デフォルトの名無しさん mailto:sage [2016/01/23(土) 23:06:15.32 ID:HdItgJjm.net] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part121 peace.2ch.net/test/read.cgi/tech/1449240881/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 peace.2ch.net/test/read.cgi/tech/1439849418/ 次期規格C++1zはこちら C++14/C++1z 20 peace.2ch.net/test/read.cgi/tech/1410382924/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/
75 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 16:05:26.42 ID:MwP9iauO.net] 継承を行うと親クラスのコンストラクタが隠蔽されてしまうのですが、 コンストラクタが継承されないこの仕様にはなにか深い訳があるのでしょうか。 多重継承が関係しているような気もするのですが、 そもそも単一継承のJavaも同様の仕様なのでもっと根本的な理由があるのだと思うのですが。
76 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 16:07:43.83 ID:MwP9iauO.net] すみませんサンプルの貼り付けを忘れていました。 ideone.com/v8QQHq
77 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 16:29:07.16 ID:uqIl8Fge.net] >>75-76 サンプル 10 行目の注釈はないものとして struct X : public Base { X(int i) : Base::Base(i) {} // 子から間接的に呼び出す必要がある }; と書くのはいかんの? Base() だけで自動的に Base::Base() を呼んで欲しいってことかな。
78 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 16:39:57.28 ID:XdnYao0l.net] 派生クラスをインスタンス化するときに派生クラスのコンストラクタは 呼び出さないで基底クラスのコンストラクタを直接呼び出したい? そんなこと出来ないのは当たり前なのだが そんなことしたくなる深い訳の方が気になる
79 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 16:40:10.39 ID:CloTf5dE.net] 例えば有名なモデリングソフトのメタセコイアのMQOファイルはモデルを>>73 みたいに記述してあるよ ただしedgeは無く、面は複数の頂点で表現されてたが エレメントが複数の面で構成されるのは仕方ないし 面が複数の頂点で構成されるのも仕方ないように思うが なんでもフラットな方が便利なのは常識だが 一体どうやってフラットにするのか興味があるわ struct face{ int elem_no; float v[16][3]; int v_size; }; vector<face> faces; こんなデータ構造じゃ、特定のエレメントだけ抜き出すのが大変だし さらにもっとフラットにして struct vertex{ int elem_no; int face_no; float v[3]; }; vector<vertex> vertices; こんな構造にしちゃうと、かなりフラットになるが、面単位で何かするのに まず同じface_noに属する頂点を探し回らなきゃならなくて超面倒なんだが さらにもっとフラットにすると struct vertex_elem{ int elem_no; int face_no; int vertex_no; int x_y_z_flag; float value; }; さすがにこれは無いか
80 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 16:48:50.66 ID:XdnYao0l.net] X(int i) : Base(i) {} を書くのが面倒くさいということか? それを自動生成するのは条件を絞れば可能かも知れんが余計に分けわからなくなりそう
81 名前:77 mailto:sage [2016/01/26(火) 16:51:07.74 ID:uqIl8Fge.net] >>77 は勇み足だった。C++11だと下のように書くか。 #include <iostream> using namespace std; struct Base { int i; Base(int i) : i {i} { cout << "ok! I got " << i << endl; } }; struct X : public Base { X(int i) : Base {i} {} // Base::Base() でなく }; int main() { X x {1}; // Base側のコンストラクタを呼べるでしょ cout << "Yes, x.i == " << x.i << endl; return 0; } 明示的なコンストラクタ呼び出しでなく {} による初期化。
82 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 17:13:30.76 ID:MwP9iauO.net] >>80 そうです、Baseを継承する派生クラスが沢山ある場合が面倒です。 コンストラクタの継承が行われれば、派生クラス側でわざわざ決まりきったコンストラクタを書かずに済むのでコードがシンプルになるなのですが、 それが出来るオブジェクト思考言語は意外と少ないです。
83 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 17:37:45.67 ID:5mNKNaDj.net] >>82 class B { public B() {System.out.println(
84 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 17:39:33.39 ID:JvvEVEHG.net] ダブルクォーテーションで途切れるの悔しい… >>82 class B { public B() {System.out.println(”B”);} public B(int i) {System.out.println(”B i”);} } class D1 extends B {} // 自動的に追加されるコンストラクタ内で暗黙的にsuper() class D2 extends B {public D2(int i) {}} // 暗黙的にsuper() class D3 extends B {public D3(int i) {super(i);}} のとき new D1();new D2(1);new D3(1); でそれぞれ B, B, B iを表示 Javaだと引数無しのときだけチョッと手間省けるね
85 名前:84 mailto:sage [2016/01/26(火) 17:46:54.81 ID:LDY5A4Ql.net] ごめん、今確かめたらそれはC++でも一緒だったw struct Base { int i; Base() : i(0) { cout << ”ok!”; } }; struct X : public Base {}; これで X x; は普通に行けたねw
86 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 17:50:26.64 ID:XdnYao0l.net] >>82 なるほど。それなら分かるわ 基底クラスのコンストラクタはある意味継承されてるんだけど protected(ちょっと違うけど)みたいな扱いになってるんだよな 何かキーワードとかであなたの言う意味での継承が出来てもよい気がしてきた
87 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 18:41:50.54 ID:/Dc76BnU.net] >>75 釣りは要らん その内 コンストラクターの継承も知らないのかバーカバーカ と言うんだろ?
88 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 19:55:14.89 ID:XdnYao0l.net] 釣られたわ C++11から出来るようになってるね ideone.com/PwOSrY
89 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 20:04:25.08 ID:yZwoVaS8.net] >>88 それで十分に嬉しいように見えるんだけど using Base::Base;の一行を書くのは>>75 的には 「子から間接的に呼び出す必要がある」に該当しないのかな? あと>>77 が何を言っているのか意味不明なの俺だけ?
90 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 21:25:05.76 ID:I8Y70xN6.net] >>51 これってコンストラクタ中から例外飛んで来たらいずれにせよメモリリークするから無駄って解釈でいいの? この例だとdeleteはされるけど、結局デストラクタが呼ばれるわけじゃないからメンバにポインタ混じっててnewしてたりするとリークするよな
91 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 21:52:07.33 ID:8rZ+8lOF.net] 構築が終わっていない中途半端な状態でデストラクターが呼ばれたらそれこそ大変だ 少しは脳みそ使った方がいいぞ
92 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 22:52:14.01 ID:IXu06oBB.net] C++ではインスタンスxのコンストラクタ内で例外が発生した場合、 xのデストラクタは呼ばれない(理由は>>91 の通り という言語仕様なのは真実なので、逃げ手としてnewに細工がしてあるだけの話 生のハンドルとかはこれそのものでは救えない。 コンストラクタで生のハンドルを確保するコードを普通に書いたら、コンストラクタが例外を生じたときにリークする それを避けるための正しいテクニックは、 1) きちんとハンドル(リソース)のwrapperを書いて、 2) そいつをxのメンバにしとく である(メンバのデストラクタは、xのコンストラクタが例外を生じても呼ばれる んまー常識的には「コンストラクタで例外を発生させない」とか「例外が発生したら諦める」設計のが 特殊な用途以外では普通な希ガス、
93 名前:92 mailto:sage [2016/01/26(火) 22:56:25.94 ID:IXu06oBB.net] >>92 プチ訂正 s/コンストラクタ内で例(が|を)発生/コンストラクタから例外をスローさせない/g コンストラクタ内で例外が発生しそうなところはtry { } catch { }で囲ってしまうのも一つの手ではある
94 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 22:58:40.82 ID:usMbn1Xz.net] >>90 RAII の徹底ができていなければリークする可能性が出てくる。 例外の発生がコンストラクタからかどうかはあんまり関係ない。
95 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:02:54.28 ID:RBo8KHcc.net] やはりバカにはC++の敷居が高いようだな
96 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:05:13.87 ID:8rZ+8lOF.net] ラッパーを使うのは王道な一つの手だが 一つの関数内で例外安全なコードを書いてればリークは起こらない。 それすら出来ないようでは他の言語を使った方がいい 「コンストラクタで例外を発生させない」と言うのはやや方向性が違っていて 「プログラムを書かなければリークは起こさない」レベルの思考
97 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:06:58.14 ID:zcSlqmoV.net] >>95 自己紹介はしなくていいぞ
98 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:12:32.60 ID:I8Y70xN6.net] じゃあもしライブラリとして提供されてるクラスがメンバに複数ポインタ持っててコンストラクタで複数newして、しかもメモリが足りなくなる可能性が結構高い場合はどうすりゃいいんだ? 他のライブラリ使うのはいろんな理由で無理、ライブラリの互換性のために元のソースいじれないってなったら漏れたらあきらめるしかないのか?
99 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:14:58.68 ID:8rZ+8lOF.net] 例外安全でない糞ライブラリの中身をいじれない場合はどうすればよいの? 質問しなきゃわからないほど馬鹿なのか
100 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:22:01.99 ID:I8Y70xN6.net] >>99 今まさに近い状況になってて、例外飛んでくるのはまた別の原因なんですけど 実際どうすればいいんですか?自分一人だけライブラリ使わないってのはできないんですけど
101 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:23:01.51 ID:CloTf5dE.net] まぁでもコンストラクタの途中で例外が発生しても コンストラクタの中でtry-catchして適切にリソース開放すれば良いだけでは?
102 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:23:51.29 ID:4LzhB3JY.net] 例外処理でメモリリークを気にしたりするのがナンセンスなんよ 例外起きたらあとはリソース閉じて終了するだけのことだから アプリケーションとしては終了に向かうだけだからリークも糞もないんよ
103 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:27:16.38 ID:XdnYao0l.net] >>100 ライブラリがバグってるならどうしょうもないだろ >>102 ずいぶんとおめでたい世界にいらっしゃるようで
104 名前:デフォルトの名無しさん [2016/01/26(火) 23:28:08.68 ID:sH2SZupb.net] コンストラクタで例外が発生したらそのクラスの何を解放するんだ
105 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:28:59.31 ID:4LzhB3JY.net] mallocに失敗したのにexit前にfreeを呼びたい みたいな不思議な連中は一定おるんよ
106 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:30:11.03 ID:8rZ+8lOF.net] >>101 おおまかにはそれでよいが 最低限 例外中立にしとくのがマナー 具体的にはfunction-try-blockを使うかthrow;で再スローするかラッパーを使うか
107 名前:デフォルトの名無しさん [2016/01/26(火) 23:30:13.68 ID:sH2SZupb.net] 例外発生する=アプリを終了するってなんなんだよ
108 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:30:33.16 ID:XdnYao0l.net] >>104 例外発生するまでに確保済みのリソース そんな面倒なことにならないようにRAIIの徹底はもう必須だよ
109 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:31:01.96 ID:CloTf5dE.net] ちなみにnewしたオブジェクトのコンストラクタ内で例外が発生した場合 デストラクタは走らないけどoperator deleteは呼ばれるからメモリリークしないよ
110 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:34:08.88 ID:TGWAfBDP.net] >>98 その通りだよ。
111 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:38:07.07 ID:8rZ+8lOF.net] >コンストラクタ内で例外が発生した場合デストラクタは走らない 揚げ足を取ると、走るケースが全くない訳ではない
112 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:44:41.90 ID:usMbn1Xz.net] >>111 ほんとならくわしく。
113 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:02:05.29 ID:zgyqI55G.net] >>112 コンストラクタ内で例外が発生してもコンストラクタ内でキャッチしてしまえば走らない コンストラクタ内で例外が発生してもコンストラクタ内でキャッチしてしまえば走らない
114 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:02:50.96 ID:zgyqI55G.net] ごめwwwwwwww 走るの間違いwwwwwwwwww
115 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:04:30.16 ID:0q1DRp6s.net] 触れないソースのリソースリークなんて気にしても仕方ないだろ 気持ち悪いけど放っておけ
116 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:13:07.10 ID:zgyqI55G.net] 普通に使ってリソースリークの危険があり、 かつユーザーの立場からリークを阻止する手段が無いというのは ライブラリのバグと言って過言ではない
117 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:34:28.52 ID:zSFGO6dq.net] いや普通にバグだから
118 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:47:13.92 ID:tYkYQITg.net] それでお客様が納得してくれるとでも?
119 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:52:40.92 ID:0q1DRp6s.net] 仕様ですの一点張り
120 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 01:45:10.90 ID:zgyqI55G.net] >>100 longjump()か例外をthrowするかして大域脱出すると良い ID:I8Y70xN6が。
121 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 02:00:29.05 ID:gidaw1Ah.net] コンストラクタ内でtry catch 再throwでいいんだろ? 何も難しいことなんてないじゃない。
122 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 03:05:27.95 ID:3jiwec3B.net] >>113 なるほどな ちなみにコンストラクターから例外が漏れた場合でもデストラクターは走る事がある struct A { A() {} A(int) : A() {throw 0;} ~A() {} }; int main() { A a{0}; }
123 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 06:38:25.30 ID:oAun2w+9.net] >>121 つ初期化子
124 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 07:11:47.54 ID:3jiwec3B.net] >>123 初期化しがどうかしたか? カタコトではただのアスペだぞ
125 名前:デフォルトの名無しさん [2016/01/27(水) 07:34:44.55 ID:T1kNk2gL.net] >>108 それはそのクラスが内部で処理することであってユーザーは何を解放するんだよ
126 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 08:01:41.14 ID:7tk5IOS7.net] ↑こんなところにアスペがもう一人
127 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 10:47:19.58 ID:oAun2w+9.net] >>124 コンストラクタ初期化子
128 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 12:30:07.60 ID:eULyfEEH.net] >>125 >それはそのクラスが内部で処理することであって ずっとその話なのだが
129 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 12:56:11.97 ID:zSFGO6dq.net] 初期化子もそうだけどデフォルトコンストラクトされる変数もそうだな コンストラクタ内でtry-catchできない やっぱりコンストラクトでの例外はまずいんじゃないか?
130 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 13:59:04.99 ID:oAun2w+9.net] C++17ではできるんだっけ?
131 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 17:48:02.83 ID:gidaw1Ah.net] 初期化子リストもメンバ変数も関係なくね? 初期化しきれたクラスはデストラクタが呼ばれ、初期化できなかったクラスは内部でcatchしてエラー処理して再送するだけ。 やっぱ単純だよ。 我らがMeyer先生はなんて言ってるの?
132 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 18:08:44.32 ID:7tk5IOS7.net] >>129 できないと判断した根拠は? ideone.com/WlFMej >>131 メイヤー「ワシ、ちょっとC++引退するわ」
133 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 18:10:24.29 ID:7tk5IOS7.net] 一カ所訂正 誤 try m{}, x{} 正 try : m{}, x{}
134 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 18:15:50.95 ID:7tk5IOS7.net] >>127 荒らしは去れ
135 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 18:45:02.79 ID:oAun2w+9.net] >>131 コンストラクタ初期化子に書くメンバーが初期化はコンストラクタのスコープ内部じゃない。 自作クラスだったら君の言うように内部catchすればいいけど他作クラスで例外をthrowするタイプだtry-catchで囲めない。
136 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 18:49:38.11 ID:oAun2w+9.net] >>134 まさか14以降を前提にしてるなんて言うまい?
137 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 19:31:29.47 ID:3jiwec3B.net] >>136 お前はコンストラクター初期化子や例外という言語機能がC++14以降だとでも言いたそうだな どれだけ勉強不足なんだ
138 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 19:39:57.53 ID:6XO7CsMP.net] お前らに一度確認していい? 初期化リストつったらコンストラクタのパラメータのカッコの横の クラス名(引数) : この部分 {} を言うんだよな? 駆け出しの頃にC++プライマーとかいう分厚い本で学んだときは たしかこうだったはずなんだが std::initializer_listの出現で落ち着かない気持ちになってきてる
139 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 19:53:14.68 ID:3jiwec3B.net] >初期化リストつったら (中略) >を言うんだよな? いやまずそこから違う
140 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 20:04:51.00 ID:1b0Lj9r3.net] クラス名(引数) : この部分は初期化子 {}
141 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 20:41:04.94 ID:aFoLhF8M.net] >>140 とんくす! ↓少し学んだ ISO/IEC 14882:1998 12.6.2 Initializing bases and members ctor-initializer: : mem-initializer-list mem-initializer-list: mem-initializer mem-initializer , mem-initializer-list mem-initializer: mem-initializer-id ( expression-listopt ) mem-initializer-id: ::opt nested-name-specifieropt class-name identifier
142 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 20:44:21.08 ID:gqKHFo+S.net] >>129 だからtry-catchなんかしない。>>94 ,108のとおりRAIIで解決する。 なんというか10年前にタイムスリップした感がある。↓読んでくれ。 https://www.google.co.jp/search?q=C%2B%2B+%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF+%E4%BE%8B%E5%A4%96
143 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:00:23.97 ID:zSFGO6dq.net] >>132 あなたのおっしゃる通りです。いい加減なこと言ってごめんなさい魔が差しましたw やはり大事なのはRAIIの徹底ですね
144 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:08:05.10 ID:oAun2w+9.net] >>137 えっ? 初期化子までtry説に含めるのはC++11ではできないって言いたいだけなんだけど?
145 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:09:24.27 ID:oAun2w+9.net] ×try説 ○try節
146 名前:デフォルトの名無しさん [2016/01/27(水) 21:10:04.69 ID:0xRCKJUw.net] RAIIって初期化がキモみたいなネーミングだけどデストラクタの解放の方が大事じゃね
147 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:13:01.64 ID:1b0Lj9r3.net] >>141 ああ、構文規則の非終端記号名のmem-initializer-listと混同していたのか。
148 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:16:28.24 ID:3jiwec3B.net] >>144 ISO/IEC 14882:1998 15p1 8行目 ISO/IEC 14882:2003 15p1 8行目 ISO/IEC 14882:2011 15p1 8行目 ISO/IEC 14882:2014 15p1 8行目 これのどこを読んだらいったいそんな嘘が出てくるのか
149 名前:デフォルトの名無しさん [2016/01/27(水) 21:19:58.24 ID:hY0OCllE.net] だからHaskell使えと言っとるだろがボケ。
150 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:23:34.50 ID:zSFGO6dq.net] >>144 俺はあなたに釣られちゃったけどこれが真実です ideone.com/rVg5CP
151 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:26:16.20 ID:Qr5LJlmv.net] このスレって常連の2、3人がID変えながら互いを罵ってんだよな?
152 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:27:35.65 ID:3jiwec3B.net] >>150 C++14の結果のようだが コミュ障は去れ
153 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:28:27.16 ID:oAun2w+9.net] >>148 えっえっ?!?! 今の今まで「14になったら使える機能か楽しみだ」と思ってた...
154 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:30:40.94 ID:hs0c0BKx.net] > C++14の結果のようだが そこは突っ込むのが正解なのかw なんか深遠な理由があるのか 高度な釣りなのかわかりかねたわ(>>144 に対してC++14の結果貼り付け)
155 名前:デフォルトの名無しさん [2016/01/27(水) 21:33:45.85 ID:0q1DRp6s.net] 初期化子って何だ? もしかしてメンバイニシャライザのこと?
156 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:36:46.74 ID:0q1DRp6s.net] >>153 Exceptional C++に出てくるぐらいにはメジャーだったはずだぞ
157 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:40:42.54 ID:3jiwec3B.net] >>155 それはですね 狡猾な>>140 が初期化子リストとメンバー初期化子とコンストラクター初期化子を混同した>>138 を惑わすために出した用語なんです気にしないで ちなみに規格ではnew A(100)とかの『(100)』の部分を指します
158 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:40:46.23 ID:5WlKM79a.net] >>155 > メンバイニシャライザ それちなみにどこで習ったの? どこの流儀?
159 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:42:32.38 ID:zSFGO6dq.net] >>152 はあそんなところに突っ込まれるとはw >>153 あなたはC++14でもだめでC++17になったら出来るかもって思ってたでしょw
160 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:43:28.66 ID:oAun2w+9.net] 申し訳ない。釣りではなく本当にfunction-try-blockはこれから来る規格だと思っていた。 >>156 持ってるけどそんな記述あったかな?
161 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:43:53.84 ID:3jiwec3B.net] >>158 >>141 を100回読み直してこい
162 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:45:04.77 ID:0q1DRp6s.net] >>158 流儀? メンバ変数の初期化を行うのはmember initializerだぞ
163 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:46:53.21 ID:gqKHFo+S.net] >>150 > B() try : _id(GetId()), _a(_id) > { > cout << "B:B" << _id << endl; > } > catch(int ex) > { > cout << "B:B" << _id << " exception " << ex << endl; このcatch内でのメンバ変数 _id の参照は未定義動作になる。 15.3 [except.handle] p10 > Referring to any non-static member or base class of an object in the > handler for a function-try-block of a constructor or destructor for that > object results in undefined behavior.
164 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:47:25.50 ID:0q1DRp6s.net] >>160 お前絶対読んでないだろw
165 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:48:01.49 ID:VHRBi97o.net] >>162 ごめんごめん、純粋に何でその名前を学んだか知りたかっただけ 上でも書いたけど俺はC++プライマーって本を読んで学んだんだけど たしかそれは 初期化リスト って書いてあったはずなんだ(多分) だからみんなソレをどこで学んで何と呼んでるのか気になっただけ
166 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:49:15.00 ID:oAun2w+9.net] 多分、なんか大昔の記事を読んで最新のものと勘違いしたまま来てしまったのだ... 鬱だ
167 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:51:52.82 ID:zSFGO6dq.net] >>163 ごめん その点は危ういと思ったけどGCCだと取り敢えず意図通りになってたから 話の本筋的にはどうでもいいと思っちゃった
168 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:52:17.67 ID:0q1DRp6s.net] すまん見直したらMoreの方だったw
169 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:52:25.06 ID:3jiwec3B.net] >>163 そういやそんな決まりがあったな すっかり忘れてた
170 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:54:30.71 ID:oAun2w+9.net] >>168 安心した。ありがとう。 俺が持ってるのは2000年11月15日発行とある。 みなさん、すいませんでした。
171 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:54:40.52 ID:88/bqypu.net] みんな企画とか読んでるのか偉いですね 1ページも読んだことないわ
172 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:01:47.89 ID:0q1DRp6s.net] >>170 Moreも2001年なんだから安心するなよw その頃からメジャーどころは載ってたはずだ
173 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:10:37.63 ID:0q1DRp6s.net] >>165 あまり意識したことはないので 恐らくコンパイラのメッセージだな 規格も読んだが後付けだと思う
174 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:13:35.94 ID:oAun2w+9.net] 鬱だ
175 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:15:41.80 ID:jBJgujTM.net] >>173 > 恐らくコンパイラのメッセージだな なるほどなるほど! こういうレスをついにもらえて俺喜んでる