是否可以将构造函数参数传递给函数而不是类对象本身?
根据以下代码
#include <iostream>
#include <string>
class CL{
public:
int id;
CL(){
std::cout << "CL () Constructor " << std::endl;
}
CL(const char * name){
std::cout << " CL(const char * name) Constructor Called " << std::endl;
}
CL(int i){
id = i;
std::cout << "CL(int i) Constructor Called " << id << std::endl;
}
void print(){
std::cout << "print method Called " << id << std::endl;
}
};
void myfunc(CL pp){
pp.print();
}
int main(int argc,char **argv){
myfunc(10);
}
我将整数传递给函数&#34; myfunc&#34;而不是类实例,它工作。我认为它实时实例化了对象。
输出
CL(int i) Constructor Called 10
print method Called 10
是不是这么模棱两可?至于我重载函数的相同代码
&#34; MYFUNC&#34;如
myfunc(int i) {
std::cout << i << std::endl;
}
它会输出 10
并忽略采用类对象的函数原型
答案 0 :(得分:3)
这称为隐式转换,适用于采用单个参数的所有构造函数。如果您不希望这样,请声明构造函数explicit
:
class CL {
public:
int id;
CL(): id{0} {}
explicit CL(int i): id{i} {}
};
void myfunc(CL pp) {
// ...
}
int main(int, char) {
myfunc(10); // <- will fail to compile
}