关于构造函数,摘引
关于构造函数,引用C/C++ codeclass Student {string nameint agepublic:Student(string name, int age)
关于构造函数,引用
C/C++ codeclass Student { string name; int age;public: Student(string name, int age) : name(name), age(age){ }}int main(void){ Student s1("huanzai", 23);//不报错 return 0;}当我把构造函数改成 Student(string& name, int age) : name(name), age(age){ }此时调用Student s1("huanzai", 23);//报错可是当我把构造函数改成 Student(const string& name, int age) : name(name), age(age){ }此时调用Student s1("huanzai", 23);//不报错求详解,谢之
[解决办法]用引用来引用一个临时对象 那么这个引用应该是const&。但是这点vs编译器不一定遵守,你的Student(string& name, int age)在某些vs编译器上是没问题的。
[解决办法][解决办法]帮忙总结下:
这个问题涉及到函数的参数解析上面
对于string类,他有一个const char *作为单个参数的构造函数--也称之为类转换成员函数
在匹配形参的时候,根据
1.完全匹配
2.类型提升匹配
3.类型转换匹配
4.用户定义转换匹配
原则,应该是第三层,但是这里有一个前提,就是对于引用和指针参数,const修饰的形参才会执行匹配转换,并且知识生成临时对象来传递的,没有const修饰的形参除非完全匹配,要不然不会生成临时对象来传递参数