首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于构造函数,摘引

2012-07-29 
关于构造函数,引用C/C++ codeclass Student {string nameint agepublic:Student(string name, int age)

关于构造函数,引用

C/C++ code
class 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编译器上是没问题的。
[解决办法]
探讨

用引用来引用一个临时对象 那么这个引用应该是const&。但是这点vs编译器不一定遵守,你的Student(string& name, int age)在某些vs编译器上是没问题的。

[解决办法]
帮忙总结下:
这个问题涉及到函数的参数解析上面
对于string类,他有一个const char *作为单个参数的构造函数--也称之为类转换成员函数
在匹配形参的时候,根据
1.完全匹配
2.类型提升匹配
3.类型转换匹配
4.用户定义转换匹配
原则,应该是第三层,但是这里有一个前提,就是对于引用和指针参数,const修饰的形参才会执行匹配转换,并且知识生成临时对象来传递的,没有const修饰的形参除非完全匹配,要不然不会生成临时对象来传递参数

热点排行
Bad Request.