C ++中的Promotion Constructor

时间:2014-01-23 10:38:02

标签: c++ constructor

什么是促销构造函数?它与复制构造函数/赋值运算符有任何关系吗?我见过一个无法理解的例子。

#include <iostream>
#include <vector>

using namespace std;

class base{
    public:
    base(){
        cout << endl << "base class default construtor" << endl;
    }
    base(const base& ref1){
        cout << endl << "base class copy constructor" << endl;
    }
    base(int) { 
        cout << endl << "base class promotion constructor" << endl;
    }
};

class derived : public base{
    public:
        derived(){
            cout << endl << "derived class default constructor" << endl;
        }
        derived(const derived& ref2){
            cout << endl << "derived class copy constructor" << endl;
        }
        derived(int) {
            cout << endl << "derived class promotion constructor" << endl;
        }
};

int main(){

    vector<base> vect;
    vect.push_back(base(1));
    vect.push_back(base(1));
    vect.push_back(base(2));

    return 0;
}

当我编译并执行时:顺序就是这样:

基类升级构造函数

基类复制构造函数

基类升级构造函数

基类升级构造函数

基类复制构造函数

基类升级构造函数

基类升级构造函数

基类复制构造函数

基类升级构造函数

请帮助我理解这个促销构造函数的概念。我在网上搜索过,但没有得到太多关于此的信息。

由于

2 个答案:

答案 0 :(得分:1)

我第一次听到“促销建设者”一词。在代码中以这种方式命名的两个构造函数都符合converting constructor的定义。

答案 1 :(得分:0)

  

什么是促销构造函数?

它不是C ++中的标准术语。 Promotion 指的是一些自动应用于内置数字类型的类型转换,并不涉及类或构造函数。

示例中的构造函数是转换构造函数:非显式构造函数采用单个参数,可用于将该参数类型转换为类类型。

非显式,它们既可用于显式转换,也可用于示例中的base(1)和隐式转换,例如

vect.push_back(42);

你的例子没有证明。