什么是促销构造函数?它与复制构造函数/赋值运算符有任何关系吗?我见过一个无法理解的例子。
#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;
}
当我编译并执行时:顺序就是这样:
基类升级构造函数
基类复制构造函数
基类升级构造函数
基类升级构造函数
基类复制构造函数
基类升级构造函数
基类升级构造函数
基类复制构造函数
基类升级构造函数
请帮助我理解这个促销构造函数的概念。我在网上搜索过,但没有得到太多关于此的信息。
由于
答案 0 :(得分:1)
我第一次听到“促销建设者”一词。在代码中以这种方式命名的两个构造函数都符合converting constructor的定义。
答案 1 :(得分:0)
什么是促销构造函数?
它不是C ++中的标准术语。 Promotion 指的是一些自动应用于内置数字类型的类型转换,并不涉及类或构造函数。
示例中的构造函数是转换构造函数:非显式构造函数采用单个参数,可用于将该参数类型转换为类类型。
非显式,它们既可用于显式转换,也可用于示例中的base(1)
和隐式转换,例如
vect.push_back(42);
你的例子没有证明。