5

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

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 のデフォルト コンストラクターが呼び出されます。しかし、私が理解できないのは、STLがオブジェクトを初期化する方法です。デフォルトのコンストラクターがあるため、intのベクトルなどの基本的なデータ型のベクトルを作成しますか? つまり、ベクトル内のすべての int の値が 0 になるのはなぜでしょうか? ゴミにならないの?

4

2 に答える 2

10

int のデフォルト コンストラクターと同等のものを使用します。つまり、int をゼロで初期化します。明示的に行うことができます:

int n = int();

n をゼロに設定します。

デフォルトの構築は、ベクトルに初期サイズが指定されている場合にのみ使用され、必要になることに注意してください。あなたが言った場合:

vector <X> v;

X がデフォルトのコンストラクターを持っている必要はありません。

于 2009-05-18T13:19:47.183 に答える
1
std::vector<Type> a(10);        // T could be userdefined or basic data type

ベクターは基本的defaultに、それが指す型を 呼び出します。Type()

  • int、double などの基本データ型の場合、int()、double() { int() は値 0 を取得します}
  • ユーザー定義のデータ型の場合、デフォルトのコンストラクターが呼び出されます。
于 2009-05-18T13:27:16.387 に答える