トップページ > プログラム > 2015年07月11日 > I825HQOD

書き込み順位&時間帯一覧

7 位/161 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000010000000135



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++14/C++1z 20

書き込みレス一覧

C++14/C++1z 20
603 :デフォルトの名無しさん[sage]:2015/07/11(土) 14:27:22.00 ID:I825HQOD
関数のプロトタイプ宣言を不要にすることは出来るけど、
C++のスタイルを維持するのであれば、厳しい条件があるね。
それは、「1コンパイル単位内であれば」、出きる、ということ。
例えば一つのcppファイル内であれば、関数のプロトタイプ宣言を無しにすることも可能。
ただし、現状の規格はそうはなってないが。
あちこちのcppファイルに実装が散らばっている状況なら原理的に無理。
だ・か・ら、
「今だってクラス内であればメンバ変数/関数順番関係なしに書いて使えるし」
ということになってる。
クラス定義は、絶対に1コンパイル単位内に収まるから、
その中であれば順不同でもOKってことになってる。
C++14/C++1z 20
612 :デフォルトの名無しさん[sage]:2015/07/11(土) 22:18:19.84 ID:I825HQOD
>>610
分割コンパイルするからそうはいかない。
a.cppコンパイル中はb.cppのことは忘れてる。
C++14/C++1z 20
617 :デフォルトの名無しさん[sage]:2015/07/11(土) 23:18:59.54 ID:I825HQOD
ともかく、今の文法では無理。
C++は構造体のメンバに他の構造体の実態を持てるので。これが痛い。
コンパイル時に構造体のサイズを計算するとき、
互いのファイルで相互依存が有った場合、問題が出る。
a.cpp----------------------------------------
struct a_outer{ file_b_inner member; };
struct a_inner{ int member; };

b.cpp----------------------------------------
strcut b_outer{ file_a_inner member; };
struct b_inner{ int member; };

a.cpp b.cpp どちらを先にコンパイルしても問題が起こる。
こういうことが起こりうる言語で、前方宣言を許すために依存関係を調べてコンパイル順を
自動化するのは無謀。突然「依存関係エラー」とか言われても、エラーの意味が大きすぎる。
自動化できないならマニュアルで行くしかない。
C++14/C++1z 20
618 :デフォルトの名無しさん[sage]:2015/07/11(土) 23:28:53.50 ID:I825HQOD
訂正

a.cpp----------------------------------------
struct a_outer{ b_inner member; };
struct a_inner{ int member; };

b.cpp----------------------------------------
strcut b_outer{ a_inner member; };
struct b_inner{ int member; };

前方宣言を許すために >> 前方宣言を無くすために
C++14/C++1z 20
619 :デフォルトの名無しさん[sage]:2015/07/11(土) 23:56:25.53 ID:I825HQOD
>>605 も 「クラス定義の中での前方参照も、型はダメとか中途半端なので、」
と書いているように、クラスや構造体のサイズ問題は色々と足を引っ張る。
型の前方参照がダメなのは、型のメンバ変数の定義に依存関係が出ると、サイズの決定が面倒なことになるから。
ちなみに、class a; と前方宣言しておくと、ポインタなら持てるようになる。
それから、メソッドの中で型をインスタンス化したりは問題ない。依存関係が発生しないので。メンバに持とうとすると怒られる。
よく考えられているギリギリの攻めの仕様だね。
コンパイラの都合を考えない人からすれば、まったく意味不明な仕様だが。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。