トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
C
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ 無名共有体.union


  DESC
    cpp 固有
    名前をもたない共有体
    [ object をもたず ] に変数にアクセス可能
    内部の変数は 共有体として働く( メモリを共有 )
    global 変数 無名共有体は static を宣言する static union { int foo, int bar };
    union は cmp に {} の 変数は メモリを共有してねと通知する
    union を宣言することで, 同一の mem 領域に mapping される.
    union 変数の Address 位置から順番に set されるようす.


    union {
      {
        float x;
        float y;
        float z;
      }
      vector3 v;
    };
POINT union は最もサイズの大きい obj に合わせられる
  typedef union uTEST
  {
    long num;
    int d;
    char s[4];
    char c;
  }test;

  test u;
  memset( &u, 0, sizeof(test) );
  u.s[0] = 'a';
  u.c = 64;    // 残りの bit は操作されないことになる.
  memDump( (int *)&u, sizeof(test) );
___

■ 前方宣言(ForwardDeclare)

DESC Compiler に class の symbol の存在を知らせる Class 型だけを記述する header は前方宣言のみでよい POINT Compiler の視点でみると case で ForwardDeclare すればいいかわかる Source を見て, Compile できれば問題なし
     // OK ( ptr (adr) を 代入するので, Foo の構造は知らなくて OK  )
    void func( Foo &f );
    void func( Foo *f );

    // ERROR ( CopyCtor が走るので, Foo の構造を知る必要がある. )
    void func( Foo f );
まとめ Object の構造( mem )を知りたいとき以外は, ForwardDeclare を使おう. TIP header 内では 積極的に利用することで, 相互依存を避ける WARNING cls mem は 定義後でないと使えない -> あたりまえ ( struct 型の定義は 相対 Address を指定するもの ) 2. cls 継承も 先に bcls が定義されている必要あり -> これ理由わからん WARNING 定義が必要な場合は ERROR

    // ERROR
    //    incomplete type is not allowed
    std::vector<  struct foo > v;

    // OK
    std::vector<  struct foo *> v;


    // ERROR
    //    object size がわからないとメモリを確保できない
    struct foo f;



    // A という class があるよ
     class A;

    class B
     {
      A objA;
      const A &getA();
     }

      // A 定義
      class A
      {
      }


















NINJAIDX 16