2013-06-15 8 views
5

通常の組合と匿名組合(または構造体)の違いについてお聞かせください。 私はちょうど1つを見つけました:
関数は匿名結合では定義できません。匿名組合と通常組合

+3

[Cの無名struct/union](http://stackoverflow.com/questions/13376494/unnamed-struct-union-in-c)、[CのAnonymous構造体/共用体](http:// gcc.gnu.org/ml/gcc-patches/1999-06n/msg00376.html) –

答えて

7

ドット演算子 "。"は必要ありません。匿名の共用体にアクセスする。

#include <iostream> 
using namespace std; 
int main() { 
    union { 
     int d; 
     char *f; 
    }; 

    d = 4; 
    cout << d << endl; 

    f = "inside of union"; 
    cout << f << endl; 
} 

この場合、正常なUnionでは「NO」が正常にコンパイルされます。

また、匿名ユニオンにはパブリックメンバーしか参加できません。

PS:構文のクラス名部分を省略しても、ユニオンは匿名のユニオンではありません。ユニオンを匿名の ユニオンとして修飾するには、宣言でオブジェクトを宣言してはいけません。

+2

丁寧な回答、+1!私は匿名の組合が存在しないと思っていました:)もし誰かがさらに読んでみたいと思っているなら(上記の答えを読んでいたのですが)、9.4節を見てください。INCITS/C++仕様の他の微妙な点については、 ISO/IEC 14882-2011 [2012]。 – Jimbo

0

私が知る限り、匿名の構造体は標準のC++では存在しませんが、いくつかのコンパイラでサポートされている可能性があります。

匿名組合には、保護されたメンバーまたはプライベートメンバーを含めることはできません。メンバーは、組合の名前を使わずにアクセスできます(明示的には持っていないので!)。グローバルな匿名組合(God forbid)は静的であると宣言されなければならない。

関連する問題