[表示 : 全て 最新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/

194 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:19:35.66 ID:Brtwb7pX.net]
構文解析のオススメ書籍教えてください

195 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:26:27.79 ID:Vcl9wz74.net]
namespaceをどう使えばいいかわかりません。
基本的に○○.hのクラスの中で定義して、○○.cppで実装すれば良いのでは?、と考えています。
namespaceを利用する理由は何ですか?

196 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/06(日) 00:31:44.13 ID:EizY3BRi.net]
>>195
他の人が作ったソースを参照するときに名前が衝突しないようにするためだろうね。

197 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:33:35.07 ID:R4Ql0hHb.net]
いろんなところからライブラリを持ってきてくっつけてアプリケーションを開発するのに、クラスや関数に名前やシグネチャかぶりがあったらコンパイル通らないじゃないか。

198 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:34:08.24 ID:LHysMdWz.net]
>>195
名前だけで個人を識別してくださいって言われたらどう思う?
いやいや苗字もあったほうが識別しやすいよと思うだろ?
そんな時に使うんだよ

199 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/06(日) 00:50:13.80 ID:EizY3BRi.net]
std::shared_ptrとboost::shared_ptrという二種類のshared_ptrがある。
stdとboostという2つのnamespaceにより同時に使っても名前は衝突しない。
また、using std::shared_ptr;のようにしてshared_ptrを切り替えて使うことができる。

200 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:53:06.89 ID:0RQOBmjP.net]
同じネームスペースの{}内に属しているクラスや関数同士で
定義の前後関係なく後ろにあるものも参照できるようになるのはいつですか?
いわゆる後方参照?と呼ばれるものだと思うのですが

今でも、同じクラス内に有るクラスやメソッドは記述の前後関係なく参照できますが
同じクラス内に定義が有るものは後方参照が可能な理由は、私が思うに
「同じクラス内に存在している」->「同一コンパイル単位に存在している」
という式が成り立つからだと思うんですよ
C++は分割コンパイルをサポートしている上に、C譲りのヘッダシステムなので
コンパイル単位を跨いで後方参照をするのが無理なのはわかります
そこで、同一クラス内に定義が有るなら必ず同じコンパイル単位に属するのは明白なので
これをもって、後方参照が可能になっているのかと
だったら、同じように同一ネームスペースの{}内に定義が有るクラスや関数も必ず同一コンパイル単位なわけですから
(何故なら{}は必ず対応していなければならないのだから)
後方参照が出来ても問題ないように思うのですが

細かいことを抜きにして、同一コンパイル単位内であれば後方参照が可能になれば良いんですが
部分的には既にできているわけですし

201 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/03/06(日) 00:55:01.26 ID:EizY3BRi.net]
また、名前空間というまとまりがあることも重要だ。
まとまりがなければ、プロジェクト全体を見ることになって、維持コストがかかる。

202 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:57:14.96 ID:PT9uiEbB.net]
>同一ネームスペースの{}内に定義が有るクラスや関数も必ず同一コンパイル単位
え?



203 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 00:58:30.86 ID:2oASoSJR.net]
10年前にPostMessageを使った監視プログラムを発明した奴に
リファレンスも読めずマトモに反論出来なかった低能の自演がまだ続くのか

204 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 01:05:53.01 ID:2oASoSJR.net]
>>187
>文の終端記号
規格のどこを読むとそうなるのかkwsk

205 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 01:16:52.82 ID:2oASoSJR.net]
>>189
>posix環境のツールも使えず
ほうほう、valgrindが一体POSIXの第何章で規定されているのですか?

206 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 02:17:18.54 ID:tuNXTXW3.net]
>>184
いやー>>165で質問者が「入力待ちを利用する」という正しい方法で解決してるのに
しゃしゃり出てきてCTRL-F5などというバッドノウハウを披露するキミの捻れたプライドには到底及ばないよ

207 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 02:29:09.64 ID:tuNXTXW3.net]
よっぽどPostMessageがウケたみたいだけど
今ではWindowsでもLinuxでもメモリリーク検出とかにはInspector(インテル)を使ってるよ

208 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 04:05:47.59 ID:ChxbUFgQ.net]
こいつ本物のヴァカだ

209 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 04:07:10.17 ID:ChxbUFgQ.net]
471 デフォルトの名無しさん[sage] 2016/02/09(火) 08:07:47.87 ID:GGDlYrLi

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

210 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 04:47:19.07 ID:Vcl9wz74.net]
>>196->>199
よくわかりました。
ありがとうございます。

211 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 06:01:58.25 ID:2oASoSJR.net]
最初>>167>>206の考えで言っているのだろうと思っていたら
>>179のレスで少し驚いた

212 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 06:10:40.49 ID:1plcRuJs.net]
他の言語からの移行組ですが正直吐き気が止まりません
この言語は頭おかしいんじゃないんですか?



213 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 07:52:12.28 ID:r0r1JwnR.net]
言語自体が「頭おかしい」かは分からないけど…。

ストラウストラップ先生は頭(の外観が)おかしい。
規格の変化の激しさ(不安定さ)を見ると規格作成者は頭おかしい。
このスレッドの住人も頭おかしい(この発言の投稿者も含む)。

C++の村へようこそ。

214 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 08:10:32.19 ID:oNsCkDHW.net]
C#の自動実装プロパティみたいなの実装される予定ある?

215 名前:デフォルトの名無しさん [2016/03/06(日) 08:29:03.39 ID:py9p5YRa.net]
>>187
どうもありがとう
enumも通りました
列挙型は列挙子しか代入できない事を理解していませんでした

enum E
{
a, b, c, d
}e;

int main()
{
cout << e << endl; //0

e = a;
cout << e << endl; //0
e = d;
cout << e << endl; //3
e = (E)1;
cout << e << endl; //1
}

配列は調査中です

216 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 10:32:12.23 ID:tuNXTXW3.net]
>>209
お前は粘着根性だけは一級だ。そこだけは褒めてやるよ
ところで、CTRL-F5で「続行するには何かキーを押してださい」
が出てくるかどうかはVSのバージョンによるようだな
例えばVS2010のデフォルトで作ったコンソールアプリプロジェクトじゃそうはならなずにコンソールすぐ消える
まあ、俺はそんなあやふやなものは永遠に使うことはないだろうけど、豆知識として頭の片隅に置いておくよ
何故そういう違いが発生するのかもおかげさまで調べたらすぐに分かったし。ありがと

217 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 10:43:08.67 ID:hANsEkzf.net]
>>216
もういいよ
VSのバージョンによらないよ

VSはCtrl +F5で起動するとサブプロセスとして走らせることができるんだよ
VS2008はサブプロセスとしてコンソールで起動されるのがデフォルトだったが、
2010以降は空のプロジェクトから作るとメインプロセスで走らせるのがデフォルトになった
ただ2010以降もコンソールアプリテンプレートから作ればサブプロセスとして走らせる設定がデフォルトになる

違いの原因を調べたって、一体何をどうやって調べたんだ

218 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 10:46:38.57 ID:LHysMdWz.net]
>>216
NGしたいからコテつけてほしい

219 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 10:48:49.35 ID:dMKN1oWb.net]
はじめまして。質問をさせてください。
dmcで作った32ビットヘルツのオブジェモジュールは
win配下etcと互換性ありすか?

220 名前:デフォルトの名無しさん [2016/03/06(日) 10:53:52.53 ID:5DvD/H5K.net]
>>213
ハゲハゲ言うなハゲ!

221 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 11:05:06.45 ID:Z2wdRjzg.net]
>>218
むしろ君が自演してないでコテ付けるべき

222 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 12:15:36.32 ID:uXhlHP6G.net]
規格の変化の激しさ?



223 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 12:41:50.70 ID:ChxbUFgQ.net]
痴呆症のようだから、定期的に貼ってやるよ。

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

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

224 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 12:52:01.64 ID:uNrtakxt.net]
おじいちゃん、それもうさっき貼りましたよ

225 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 13:05:10.37 ID:FS9V5eXL.net]
おじいちゃん、それもうさっき貼りましたよ

226 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 16:30:31.67 ID:MC5mpgnR.net]
Windowsのスペシャリストを気取ってVSの使い方も知らないとは情けないな
しかも入力待ちとか本来不要で本末転倒な解決策を改善だと思ってるし

227 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 16:55:34.96 ID:rlBUJ/rg.net]
c++の仕様の拡大は信者のプライドの拡大と比例している。

228 名前:213 mailto:sage [2016/03/06(日) 17:32:52.89 ID:r0r1JwnR.net]
古い書き方がエラーになるわけじゃないから「規格の変化」は不適切だったね。
>>222 を見て「しまった」と思ったけど、他の良い表現が思いつかなかった。
でも >>227 に乗っからせてもらう。「仕様の拡大」がより適切だ。

規格や仕様じゃないけど、推奨される書き方は変化が大きいよね。
数年前のきれいなソースも、すぐに古臭くなる。
…などと知った口を叩けるほどC++の経験は積んでないんだけど。

229 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 18:16:36.06 ID:o7h42g4R.net]
互換性維持のために既存の文法の隙間に新機能を詰め込んでいるような状態だからなぁ。
そのうち維持しきれなくなってOpenGLのようにばっさりやることになるんだろう。

230 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 18:46:01.70 ID:iWD/4muj.net]
具体例

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だからとかいうのがあったりする






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

前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