4

私は、C++で同じことを達成するための多くの異なる方法があることを理解しています。ただし、構造体を初期化するこれらの方法の違いを知りたいと思います。また、これらのメソッドのいくつかはCからのものであることがわかっているので、C++での処理方法についても知りたいと思います。

struct MyStruct
{
    int x, y, z;
};

MyStruct s1 = { 0 };  //I think this is from C but not really sure.
MyStruct s2 = { }; //I think this might be from C++
MyStruct s3 = { sizeof(MyStruct) } ; //Not sure where this comes from but I like it

C ++でプログラミングする場合、どちらを使用すればよいですか?

4

5 に答える 5

5

MyStruct s3 = { sizeof(MyStruct) } ;あなたが思っていることをする可能性は非常に低いです:

struct MyStruct
{
    int a;
    int b;
};

この例では、は8と0MyStruct s3 = { sizeof(MyStruct) } ;に初期化されます。x3.ax3.b

于 2013-01-16T21:36:23.153 に答える
3

(新しい均一初期化構文ではなく、PODタイプを想定しています)

構造体に整数から初期化できる最初の要素があると仮定すると、3つはC++での有効な初期化です。3番目のオプションは、構造体の最初のメンバーを構造体のサイズに設定し、残りのフィールドはゼロで初期化されたままになります。

最初の2つはC++では同等ですが、2つ目は有効なCではありません。Cの場合、中括弧内に少なくとも1つの値を渡す必要があります。

于 2013-01-16T21:39:16.717 に答える
0

[C++を想定]s1の場合、MyStructの最初の変数をゼロに初期化しています。s3の場合、構造のサイズに初期化しています。どちらの場合も、コンパイラーは指定された値をMyStructの最初にリストされた変数のタイプに合うように変換します。

于 2013-01-16T21:39:49.420 に答える
0
MyStruct s1 = { 0 };

この初期化の王様を使用して、構造の最初の要素を初期化します。値が要素タイプに対応していない場合、コンパイラー(gccやg ++など)は暗黙的なキャストを試みます。他のすべての要素はデフォルト値に設定されます。

MyStruct s3 = { sizeof(MyStruct) };

まったく同じです。最初の要素の値は、構造体のサイズ(バイト単位)になります。

MyStruct s2 = { };

最後に、この初期化はC ++でのみ有効であり、Cでの同等のものはですMyStruct s2;。すべての値をデフォルトに初期化します。

于 2013-01-16T21:49:00.900 に答える
0

1つ目は、構造体要素を初期化して、Cでnullへのポインターをゼロにします 。http://www.ex-parrot.com/~chris/random/initialise.htmlおよび構造体をゼロ/nullに初期化/リセットします。

ただし、C++ではありません。C ++では、最初の要素が初期化されます。

MyStruct s1 = { 0 };  //I think this is from C but not really sure.

2つ目は、1)Cの場合のように、C++ではゼロに初期化されます。

MyStruct s2 = { };

3つ目は、最初の要素の値をCおよびC++のMyStructのサイズに設定します。

MyStruct s3 = { sizeof(MyStruct) } ; //Not sure where this comes from but I like it
于 2013-01-16T22:04:36.503 に答える