2016-12-30 6 views
4
#include <iostream> 

class vec 
{ 
public: 
    int arr[2]; 
}; 


int main() 
{ 
    vec a = { { 1,2 } };// works 
    vec b = { 1,2 };// works too ,but why ? 
    std::cin.get(); 
} 

vecにはデフォルトのコンストラクタ以外のコンストラクタがありません。イニシャライザリストを直接使用して、1つの配列だけを持つ構造体をメンバとして初期化することはできますか?

しかし、このコードをコンパイルすると、なぜ私は不思議です。

http://ideone.com/uyx98o

+3

http://en.cppreference.com/w/cpp/language/aggregate_initialization – Praetorian

+0

これは、 'std :: array'も同様に機能します。 –

答えて

3

Aggregate initializationあなたも、それを動作させるために、ネスト権利を取得する必要はありませんし、あなたもメンバーがあります未満の値を提供することができ、素晴らしいです:

#include <iostream> 
#include <string> 

struct A { 
    struct { int a; std::string b[3]; } a; 
    double b, c; 
}; 

int main() { 
    A a = { 10, "a", "b", "c", 3.1415 }; 
    std::cout << a.a.a << " " << a.a.b[0] << " " << a.a.b[2] 
       << " " << a.b << " " << a.c; 
} 

Live

関連する問題