初始化向量<Temp> myVector(10);

Initialize vector<Temp> myVector(10);

本文关键字:myVector Temp 向量 lt 初始化 gt      更新时间:2023-10-16

根据Absolute c++书籍:

vector<AClass> records(20); // vector consctructer uses the
                             // default constructor for AClass to initialize 20 elements.

温度h

#ifndef TEMP_H
#define TEMP_H
class Temp {
public:
    Temp();
    static int b;
};
#endif /* TEMP_H */

临时.cpp

#include <iostream>
#include "temp.h"
using namespace std;
int Temp::b=9; // static value for control 
Temp::Temp(){
    cout<<"Initialize";
    ++b;
}

main.cpp

#include <iostream>
#include <vector>
#include "temp.h"
using namespace std;
int main(int argc, char** argv) {
    vector<Temp> a(10); // 10 elements
    cout<<Temp::b;
    return 0;
}

我的结果是:Initialize10;

正如你所看到的,constructor只调用了一次。为什么会这样?我很困惑。

vector构造函数在C++03和C++11(及更高版本)中的行为不同。

在C++03中,它插入默认构造的Temp对象的10个副本:默认构造函数被调用一次,副本构造函数(您没有插入)被调用10次。

在C++11中,它插入了10个默认构造的Temp对象。