簡體   English   中英

向量中元素的默認構造

[英]Default construction of elements in a vector

在閱讀這個問題的答案時,我對向量中對象的默認構造產生了疑問。 為了測試它,我編寫了以下測試代碼:

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結構默認構造函數。 但是我無法理解的是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

Vector基本上調用它指向的類型的defaultType()

  • 如果它是像int這樣的基本數據類型,那么double就是int(),double(){int()將得到值0}
  • 如果用戶定義了數據類型,那么將調用默認構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM