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


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

C++相談室 part123



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

前スレ
C++相談室 part122
peace.2ch.net/test/read.cgi/tech/1453557975/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】
peace.2ch.net/test/read.cgi/tech/1439849418/

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

231 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 18:54:13.36 ID:O4MCW888.net]
auto は既存文法の隙間狙いだね

232 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 20:21:03.80 ID:rlBUJ/rg.net]
= 0 で pure virtual とかな。。
素人から見ても馬鹿みたいな構文だわ。

233 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 21:30:59.08 ID:0RQOBmjP.net]
>>223
この発言って、本人は

メモリアロケーションが失敗するより先にPostMessageが失敗するようになって
プログラムでPostMessageを使っていた場合は動作不能になって困るから
その辺に対処しなければならない

ってつもりで書いていると思うんだけど、一部の人は

メモリアロケーションに失敗するより先にPostMessageが失敗するようになるから
メモリ不足のテストに使える

って読み違えているんだよね、わざとかもしれないが

でもそんな究極の生命力のログ取りソフトを作らなきゃならないときに
サブスレッド作ってメインスレッドにデータ渡すときにPostMessage使っている時点でバカなんだがな

234 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 21:46:56.54 ID:2oASoSJR.net]
>メモリ不足のテストに使える
>って読み違えているんだよね

俺もずっとそう思ってたが、よく読み返したら違っていた
コピペ荒らしには何を言っても無駄だろうが

235 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 23:29:20.12 ID:ChxbUFgQ.net]
461 デフォルトの名無しさん[sage] 2016/02/08(月) 22:06:08.66 ID:LnO11qfO

まあ商用でもシミュレーションソフトとか、メモリ不足や設定ミスしたらエラーも出さずに普通にセグフォで落ちる場合があるものも多いけど。

ご丁寧にエラーを出したところでメモリ増やすかメッシュ数減らすと言うのは変わらんわけで。

467 デフォルトの名無しさん[sage] 2016/02/09(火) 04:30:48.06 ID:1CYnHFpe

>>461
世の中にある商用のシミュレーションソフトとやらのほとんどは
おまいらが見たら噴飯物かあるいは卒倒するレベルのコードだと思う
とくに国産ソフトは

470 デフォルトの名無しさん[sage] 2016/02/09(火) 07:58:11.21 ID:sh9Vl//D

>>469
設定ミスでフォルトするのはどうかと思うが、メモリ一不足の対応は難しいな
痴呆症のようだから、定期的に貼ってやるよ。

471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

Windowsでエクスプローラその他殆どのアプリがメモリ不足死んだ状態でも生き残らななきゃ
いけないシステム監視ソフトを書いたことがある俺に言わせるとそれほど難しいことじゃない
Windowsの場合、メモリアロケーションに失敗する前にPostMessageが失敗するようになるから
その辺に対応するのがコツ

236 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 23:38:50.41 ID:ChxbUFgQ.net]
>>233-234
他プロセスがメモリ使い尽した状況でPostMessageが失敗する
という現象が発生するという無能クンの主張

無能クンがPostMessageの失敗に対応したとか関係ない

そのような現象が無能クンの主張どおり発生するなら、それはメモリ状況の観測に利用出来るということだ

無能クンの報告では、簡単に作れるメモリを使い尽くすテストプログラムで再現したそうだし 笑

237 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 02:22:11.72 ID:rcA1ymXW.net]
オツムの弱さは仕方ないが
スレを荒らすのはいただけない

238 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 04:14:17.45 ID:1EfQqvnH.net]
reinterpret_castながったらしい
なるべく使わせない為の配慮なんだろうけど

239 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 06:54:32.46 ID:HUiylToy.net]
>>233
そもそも...

> メモリアロケーションが失敗するより先にPostMessageが失敗するようになって
自体がほんとかなぁ〜?
って思われてるし

> その辺に対処しなければならない
そのご自慢の対処方法が GetLastError( ) の確認もせずにリトライするだけ
とかのお笑いレベル

どう見てもたまたまうまく動いてるように見えたからどやってるようにしか見えん



240 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 10:18:53.31 ID:skfTtER3.net]
>>238
読み方が分からないからなるべく使わないようにしてるw
リインタープリットであってるのかな

241 名前:デフォルトの名無しさん [2016/03/07(月) 10:22:22.50 ID:TiPYYq0f.net]
strlenは?

242 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 10:37:35.54 ID:VfKbAPeO.net]
シュトーレン

243 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 11:38:42.08 ID:4dTN6Z0P.net]
>>238
Yes, but my program depends on the function and works well so far.

244 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 15:55:29.06 ID:AqI6//Ed.net]
reinterpret_cast<int>(x)ってやってることは結局(int)xじゃん。
いっそのこと(int)x使えばいいのに。

245 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 16:07:40.49 ID:4dTN6Z0P.net]
>>244
Never!

246 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 17:44:56.74 ID:SPuLNVrG.net]
>結局(int)xじゃん

reintrepret_castを何だと思っているんだろう

247 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 18:00:16.97 ID:Ie6AXs1q.net]
コンパイルできない…だと?!

248 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 18:41:28.00 ID:rjj7cXsm.net]
void F(std::string&& s)
{
 F(s);
}
sは右辺値参照なのにどうしてFに渡せないのですか?

249 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 18:44:55.35 ID:AwkwjYtb.net]
左辺値だから



250 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 18:47:33.85 ID:vq5fVXSL.net]
std::move(s)

251 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 20:17:57.14 ID:z9gSfyl1.net]
右辺値参照は右辺値を参照しているものであってそれ自体は左辺値

252 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 20:30:48.32 ID:rcA1ymXW.net]
まるで、式 []()->auto&&{return 0;}() が左辺値かのような物言いだな

253 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 21:19:45.32 ID:PJh8eKUi.net]
問い
std::string && s = hoge();
sは右辺値か左辺値か

254 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:01:51.49 ID:rcA1ymXW.net]
まるで左辺値か右辺値かのどちらかであるような物言いだ

255 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:16:10.78 ID:DhnnCcYX.net]
え?左辺値じゃないの?

256 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:19:04.83 ID:be9Auz0b.net]
>>253
は?何が言いたいのか意味不明
その式の評価値は真か偽だろ

257 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:19:40.89 ID:be9Auz0b.net]
>>253
sはhoge()の戻り値

258 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:21:10.23 ID:addXPaOO.net]
真偽値??

259 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:22:18.18 ID:addXPaOO.net]
名前がついていて右辺値なんてあったっけ?
ないよな?



260 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 22:30:41.58 ID:rcA1ymXW.net]
スコットメイヤーの本ですら(意図的だが)不正確な説明がしてあるので>>255が騙されるのは仕方ない
規格上はどちらでもない

261 名前:デフォルトの名無しさん [2016/03/07(月) 23:33:11.14 ID:DhnnCcYX.net]
>>260
どういう解釈になるんです?
この文だけでは未確定ってこと?

262 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 23:58:07.53 ID:rcA1ymXW.net]
>>261
『std::string && s = hoge();』
この『s』は右辺値参照型の変数だが、式ではないので値のカテゴリー(lvalue,xvalue,prvalue)の概念は存在しない

263 名前:262 mailto:sage [2016/03/08(火) 00:01:44.10 ID:xyKYQJcY.net]
auto s2 = s;
のように式として使われて初めて左辺値になる

264 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 00:12:01.42 ID:xyKYQJcY.net]
この例だと右辺値への自動変換が働くからわかりづらいな
「f ( s ) に含まれる式sは、型が右辺値参照型で値のカテゴリーは左辺値」
と言った方がいいだろうか

265 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 00:13:06.20 ID:A6lTQmi7.net]
>>262-263
なるほど、確かにここだけではどれかとは言えないですね。
勉強になりました。ありがとうございます。

266 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 07:10:35.81 ID:jeIx1SXX.net]
細かいこと言ってるとハゲるぞ

267 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 07:58:44.45 ID:s5rIDaCh.net]
C++界隈ではハゲは弱点にならない、と思う。
規格でどう決まってるかは知らないけど。

268 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 19:34:59.52 ID:0k5HNdyV.net]
C++でハゲが弱点になるかどうか
厳格に規格で決まっていたら
ハゲ病的すぎるだろ

269 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 21:55:31.91 ID:A6lTQmi7.net]
C++マスコットの頭部が薄いのは、禿げ上がる程の高速動作を表現しています。
こうした考えられた仕様と設計を、一般の価値観で弱点と批判するのは論点がずれていますね。



270 名前:デフォルトの名無しさん [2016/03/08(火) 21:56:39.84 ID:Q4atenOx.net]
ズレてるのはお前のズラだろ

271 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 22:06:57.27 ID:A6lTQmi7.net]
お前今俺のことハゲって言ったか?

272 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 22:12:40.09 ID:OMUEfTHQ.net]
そんなこと言ってないハゲ
気のせいハゲ
これはただの語尾だハゲ

273 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 22:34:06.49 ID:+4p1BEPZ.net]
言っとくけどハゲと坊主は違うからな

274 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 23:26:46.03 ID:40zCAszT.net]
>>200
namespaceは同じ翻訳単位とは限らないお。

275 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 00:01:35.54 ID:gceSYQgA.net]
同じネームスペースは必ず同じコンパイル単位だとは限らないけど
同じネームスペースの{}で囲われた部分は同じコンパイル単位になるだろ
さもなくば、}が無いです、ってコンパイラに怒られる
同じコンパイル単位で、{}は必ず対になってなきゃダメだからね

だからネームスペースどうこうってより、その後ろの{}こそが重要なんだよ
{}に囲われた部分は必ず同じコンパイル単位になるから
本当なら前方参照は可能なはず

今は同じクラス内に有るもののみ前方参照が可能だが
これはクラス定義内は{}で守られていて必ず同じコンパイル単位になることが保証されているからだとも考えられ
同じ理屈でネームスペースにも拡張しても良いはず
もっと単純に、同じコンパイル単位であれば、前方参照が可能としても良いと思うがね

今のクラス内のみ前方参照が可能とかという、中途半端な仕様は意味が分からないね
文法的に出来るんならやれよ、他の今風の言語は大体可能だぞ

C#なんか、コンパイル単位を飛び越えて前方参照が可能なように
並行してコンパイルするって聞いたことあるぞ、本当かどうかは知らんがな
未定義なシンボルに出会ったら、一旦中断して、別のファイルをコンパイルするって感じかね
全く本当かどうかは知らないし、適当だが、C++にそこまでの要求はしない
ただ、同じコンパイル単位であれば前方参照できても良いだろってだけの話

276 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 00:52:56.35 ID:gceSYQgA.net]
極端な話、今のC++でもソースコード全体を適当なダミークラスで囲ってやれば
前方参照し放題の、順番なんか気にしない状態になるわけで(←実際には多少の制約はあるが)
既に、そういうことが現実に可能な状態なわけだから
同じコンパイル単位で前方参照を可能にすることは技術的に然程難しいことではないはずなんだよね

277 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 00:53:35.71 ID:R7oQ7N64.net]
必要ないからだろ。
クラスのメンバ関数は前方宣言できないかわりに前方参照できるようにしてるだけで。

278 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 01:02:25.39 ID:gceSYQgA.net]
//test.hpp
class name
{
  void method(); //←コレ
};

これがメンバ関数の実質的な前方宣言だろ
実体の方はcppファイルにあるんだからな
だから、C++的には、たとえクラス内の前方参照が出来なかったとしても、一応成り立つんだよ
なのに、クラス内に関してだけは、利便性のために前方参照が可能となっている

だったら、利便性のために、同じコンパイル単位内であれば前方参照可能としても良いだろ

279 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 01:22:01.07 ID:gceSYQgA.net]
つまりは、もし仮にC++がクラス内で前方参照が出来なかったとしたら
クラス内で何か相互参照しているような場合は
必ずクラス定義とメンバ関数の実体は分けて定義してください、ってことになるわけだが
実際それで問題ないし、C++erには日常茶飯事にすら感じる話だが
これが面倒だからクラス内に関しては特別に前方参照を可能としたわけでしょ

でも、「相互参照している場合はクラス定義とメンバ関数の実体は分けて書いてください」
は、クラス内だけじゃなくて、C++の彼方此方に頻出するわけで
クラス内の相互参照問題だけ特別扱いする意味が良くわからないんだよね
技術的に可能な範囲で考えると、同じコンパイル単位なら前方参照可能だろう



280 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 01:46:28.08 ID:gceSYQgA.net]
俺もね、C++が全く前方参照を許していないのだったら諦めもつくよ
むしろ清いとすら思う

でもクラス内だけは特別に前方参照可能なんだよ
もしクラス内の前方参照が出来なくても言語としては成り立つにも拘わらずだよ?
もし出来なくても、クラス内で相互参照が発生した場合は、クラス定義とメンバ変数の実体を分けて書けって話で
これはC++では日常だろ?仮にクラス内の前方参照が出来無くてもC++的には普通のこと、むしろ自然

でも何故かクラス内だけ前方参照可能なんだよな
同じクラス内に有れば、変数もクラスも関数も、前方参照可能なんだよ
実際、ダミーのクラスでコードを囲めば、クラスだろうが変数だろうが関数だろうが
前方参照し放題って書き方も可能で、一つのテクニック
それが可能なのだから、技術的には同じコンパイル単位であれば前方参照可能に出来る筈なんだよ

281 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 02:13:30.73 ID:gceSYQgA.net]
訂正
クラス定義とメンバ「変数」の実体

クラス定義とメンバ「関数」の実体

282 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 04:38:36.51 ID:XYqbGPFP.net]
確かにクラスでforward-declarationがいらないが為にめちゃくちゃ解りにくいソース書いて来る奴らにイライラするときがあるな

283 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 06:24:16.72 ID:PsUKAneX.net]
ぼくのかんがえたさいきょうのしーぷらすぷらす

の独演会は終わった?

284 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 11:50:49.57 ID:WF7rFyWl.net]
「利便性を向上させる機能が一部既に存在しているのだから適用範囲を拡大すべき」
そんなにおかしな意見ではないと思うが
どこの世界にも「改善」を否定する283のような残念な人間は居るものだ

285 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 11:55:58.57 ID:c8zeaZJl.net]
別に改善を否定してるとは限らないだろ?
単に長文を否定してるだけかもしれない

286 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 12:05:50.76 ID:1UcnLTLP.net]
こんな所で吠えてても実装なんてされないよ?

287 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 14:02:39.92 ID:VjFIrQgn.net]
反響があれば実装はされるだろ。

288 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 14:25:54.39 ID:WCvUs0lb.net]
まあ長文はいらないよね。
別に大したこと言ってないんだから1レスで短く説明すればいい。

289 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 14:26:38.30 ID:3jrP1VBb.net]
反響があるくらいならとっくにC++なんて廃れてるよ



290 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 15:12:18.63 ID:lSGTJ8xS.net]
対偶を取ると、
「C++が廃れてないなら反響はなかった」

291 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 17:36:52.78 ID:lHuhk1uY.net]
ADL周りの仕様が今以上に訳ワカメになるからダメだろう。

クラスと違って名前空間は後でいくらでも弄れるのだから、コード書く人間がどれが呼ばれるか今以上に予測が難しくなる。

292 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 19:25:22.04 ID:8DyMxRve.net]
>>284
そう言うのがそれしかないとでも思ってるのか?
例えば inner class がどうあがいても前方参照できないことについてはどう思ってるんだい?
自分のことしか考えてなさそうだから
ぼくのかんがえたさいきょうのしーぷらすぷらす
って書かれるんだよ

293 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:19:55.72 ID:gceSYQgA.net]
>例えば inner class がどうあがいても前方参照できない

struct outer
{
  struct inner_a
  {
    void method(){ inner_b::method(); }
  };

  struct inner_b
  {
    static void method(){};
  };
};

普通にinner_a内からinner_bを使えますが、いったい何のことを言っているんですか?
コンパイルもちゃんと通りますよ

294 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:30:15.59 ID:EHNG1aVZ.net]
それはVSだからとかいうのがあったりする

295 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:35:08.09 ID:PsUKAneX.net]
>>293
> いったい何のことを言っているんですか?
それはこっちの台詞だよ...
inner class 前方参照
あたりでググってから出直してこい

296 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:37:16.35 ID:gceSYQgA.net]
そうなの?

297 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:39:49.11 ID:gceSYQgA.net]
>>295
だったら、インナークラスの前方宣言が出来ないって書くべきで
「inner class がどうあがいても前方"参照"できない」
って書くのはおかしくないですか?そっちのミスでしょ

298 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:53:21.58 ID:gceSYQgA.net]
VSだけかもしれないけど、こんな複雑なコードもちゃんとコンパイルできる

struct outer
{
  void method()
  {
    inner_a().method();
    auto obj = new inner_b::inner_inner;
    obj->method();
    obj->value = inner_b::inner_inner::enum_::e;
  }
  struct inner_a
  {
    void method()
    {
      inner_b::inner_inner().method();
    }
  };
  struct inner_b
  {
    struct inner_inner
    {
      enum struct enum_{ e, };
      enum_ value;
      void method(){}
    };
  };
};

一旦クラスで囲んでしまえば、こんな入り組んでいても、何事もなかったかのように前方参照が出来てしまう
C++を同一コンパイル単位内で前方参照を可能とすることに、文法的な隔たりや、技術的ハードルは無いという事だね

299 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:56:46.43 ID:WCvUs0lb.net]
まだ荒らし足りないのか



300 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 21:57:25.47 ID:PsUKAneX.net]
>>297
> 「inner class がどうあがいても前方"参照"できない」
> って書くのはおかしくないですか?
メソッドではなく inner "クラス" の前方参照ができるようになってから出直してこいよ

301 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:05:10.18 ID:WCvUs0lb.net]
>>300
いやお前も何言ってるんだよ・・・。

302 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:09:47.23 ID:WF7rFyWl.net]
>>292
「クラススコープでできていることと同等のことを一つの名前空間定義のなかでもしたい」
というID:gceSYQgAの話と関係無いことを言い出す理由が不明。
唐突に根拠も無く「自分のことしか考えてなさそう」とか言い出すあたり、
知覚障害か何か?

303 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:10:12.26 ID:jX68pRI9.net]
この手の議論のためだけに無駄に頑張る人が多いのがc++ってイメージ。

304 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:13:56.70 ID:gceSYQgA.net]
>>300
struct outer
{
  void method(){ inner_b obj; //←これ }
  struct inner_a
  {
    void method()
    {
      inner_b obj; //←これ
    }
  };

  struct inner_b{ };
};

VSだけかもしれないけど、インナークラスの前方参照は出来ますよ、ただし、メソッド内ではね

struct outer{ inner *ptr; inner{}; };
って書けない話だろうけど
struct outer{ struct inner; inner *ptr: struct inner{}; };
って前方宣言してあげれば良いだけで、大した手間ではない
同一コンパイル単位で前方参照できるといっても、例外は有って構わないわけで
struct hogehoge; と書くことぐらいの手間は全くの程度問題

305 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:23:03.30 ID:gceSYQgA.net]
何事にも例外が有ってよいと思うわけです、ハイ
完ぺき主義者ではないので

仮に
「インナークラスの型のポインタ変数を前方参照っぽく定義より先に使って宣言したいときは
 struct hogehoge; と事前に前方宣言しなければならない」
というルールが有ったとしても、この程度は何の手間でもないから問題ないですね

306 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:24:08.59 ID:gceSYQgA.net]
あーこれ間違ったわ
struct outer{ inner *ptr; inner{}; };

struct outer{ inner *ptr; struct inner{}; };

struct が抜けてたわ

307 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:25:04.02 ID:WCvUs0lb.net]
>>305
それならそのまま使えばいいじゃないの。
何に不満があるんだよ。

308 名前:デフォルトの名無しさん [2016/03/09(水) 22:25:25.73 ID:eOjuPS6Y.net]
int main()
{
struct A{ A(){} };
struct B{ A a; int x; };
B b = B();
printf( "%d\n", b.x );

309 名前:デフォルトの名無しさん [2016/03/09(水) 22:26:12.04 ID:eOjuPS6Y.net]
b.xがvc2015だと0なのに2012、2013だと不定値になります。何故でしょうか。



310 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:28:49.66 ID:lHuhk1uY.net]
不定なのが偶々0なだけ

311 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:30:44.15 ID:av11/7D/.net]
初期化されてないから

312 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:32:19.48 ID:WCvUs0lb.net]
>>309
0が正しいと思う。MSのバグじゃないの?

313 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:34:09.23 ID:+X5y9V0s.net]
>>309
0が正しい。

314 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:35:46.14 ID:+X5y9V0s.net]
なので、VC++のバグに1票。

315 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:37:39.69 ID:PsUKAneX.net]
>>302
できるからやればいいじゃん
って言うのは ID:gceSYQgA が言ってること以外にも色々ある
ってまで説明しないとわからんの?
主張するのは勝手だけど、長々やるほどじゃねーだろ
って言われてるだろ

316 名前:デフォルトの名無しさん [2016/03/09(水) 22:41:03.03 ID:WCvUs0lb.net]
ごめん血迷ってた。default-intializedだね。

317 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:43:46.61 ID:+X5y9V0s.net]
>>316
zero initializeでは?

318 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:46:47.91 ID:lHuhk1uY.net]
いやPODだから不定値だろ

319 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:48:02.12 ID:WF7rFyWl.net]
PODだと不定値
などという仕様がどこから出てきたのか



320 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 22:49:51.34 ID:+X5y9V0s.net]
>>318
だからゼロ初期化という仕様なんだって。

321 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 23:01:30.54 ID:WF7rFyWl.net]
ついでに、PODがあるようには見えない

322 名前:デフォルトの名無しさん [2016/03/09(水) 23:05:53.89 ID:WCvUs0lb.net]
逆、非PODだから不定値。
自分はPODのカッコ付きと勘違いした。

323 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 23:10:57.26 ID:WF7rFyWl.net]
ここまで、>>309の炎上学習法若しくは確認間違いという指摘無し

324 名前:デフォルトの名無しさん [2016/03/10(木) 01:14:31.68 ID:lKwsVgJC.net]
という>>323 の炎上学習法に見えるね
自分で確認するのが面倒だからって

325 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 01:44:57.86 ID:eUGHchpD.net]
0になったり他の値になったりするのは、偶々だね。

12.6.5のサンプル
struct C {
C(){}
A a;
const B b;
int i;
int j = 5;
};
// initializes members as follows:
// OK: calls A::A()
// error: B has no default constructor
// OK: i has indeterminate value
// OK: j has the value 5

規格書読めない初心者は発言しないように。

326 名前:デフォルトの名無しさん [2016/03/10(木) 01:58:57.97 ID:8KJ6+/BF.net]
>>325
話を読めない人は発言してもいいんですか?

327 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 02:32:53.57 ID:mfhQ4lhr.net]
>>325
お前さーC++14の規格票を持ってることだけが自慢なんだろ
俺も持ってるからお前の間違い突っ込んでやるよ

328 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 02:47:23.86 ID:eUGHchpD.net]
タダで入手できるもの持ってると自慢できるのか?

じゃ、自慢しよう
どうだ、まいったか

329 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 03:23:13.76 ID:mfhQ4lhr.net]
>>328
タダだと?どこで無料で入手出来るというんだ
お前もしかしてタダで入手したのか?



330 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 03:41:17.30 ID:mxNsUMFn.net]
>>308-309
B() で B 型のオブジェクトが値初期化 "value initialize" される。 (8.5 p11)
B はユーザー定義のデフォルトコンストラクタを持たないクラス型なので、値初期化のプロセスとして
まずゼロ初期化 "zero initialize" され、そのあとデフォルト初期化 "default initialize" される。 (8.5 p8 bullet-2)
int 型の B::x がゼロ初期化されると値 0 になる。 (8.5 p6 bullet-1)
そのあと B::x がデフォルト初期化されるが、 int 型なので何も行われず 0 のまま。 (8.5 p7 bullet-3)

と言う感じで、 C++14 の規格に従うと 0 になる。

C++03 以降だと経路が多少違うものの同じ結果になるけど、古の C++98 では B::x は不定となってしまっていた。
www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#35

MSDN 見る限りだと 2013 で value initialize に対応してそうなんで、 2013 で不定ならバグかな。
https://msdn.microsoft.com/en-us/library/w7wd1177%28v=vs.110%29.aspx
https://msdn.microsoft.com/en-us/library/w7wd1177%28v=vs.120%29.aspx

331 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 10:36:48.16 ID:OLUNjZSr.net]
>>330
この仕様ってポインタに対しても有効?
以前似たような質問が議論されてたんだけど。
echo.2ch.net/test/read.cgi/tech/1439849418/184






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

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

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