質問

これに対する回答を読んでいると、 質問 ベクター内のオブジェクトのデフォルトの構築に関して疑問が生じました。それをテストするために、次のテストコードを書きました。

struct Test
{
    int m_n;

    Test(); 

    Test(const Test& t);

    Test& operator=(const Test& t);
};

Test::Test() : m_n(0)
{
}

Test::Test(const Test& t)
{
    m_n = t.m_n;
}

Test& Test::operator =(const Test& t)
{
    m_n = t.m_n;
    return *this;
}


int main(int argc,char *argv[])
{
    std::vector<Test> a(10);
    for(int i = 0; i < a.size(); ++i)
    {
        cout<<a[i].m_n<<"\n";
    }

    return 0;
}

そして案の定、Test structs のデフォルト コンストラクターは、ベクター オブジェクトの作成中に呼び出されます。しかし、私が理解できないのは、デフォルトのコンストラクターがあるため、intのベクトルなどの基本的なデータ型のベクトルを作成するオブジェクトをSTLがどのように初期化するのかということです。つまりベクトル内のすべての int の値が 0 になるのはなぜですか?ゴミじゃなくてもいいのでは?

役に立ちましたか?

解決

これは、それらを初期化ゼロにあるint型のデフォルトコンストラクタ、同等のものを使用しています。あなたが明示的にそれを行うことができます:

int n = int();

ゼロにNを設定します。

ベクターは初期サイズを指定された場合、デフォルトの構成にのみ使用し、必要とされることに留意されたいです。あなたが言った場合:

vector <X> v;

Xは、デフォルトコンストラクタを持っている要件がない。

他のヒント

std::vector<Type> a(10);        // T could be userdefined or basic data type

ベクトルは基本的に呼び出します default それが指す型の場合: Type()

  • intのような基本データ型の場合、doubleはint()、double(){int()が値0を取得します}
  • ユーザーが定義したデータ型の場合、デフォルトのコンストラクターが呼び出されます。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top