构造函数A(const string &b):i(0),s(b),d(0.0){};
答案:2 悬赏:10 手机版
解决时间 2021-02-27 23:09
- 提问者网友:咪咪
- 2021-02-27 20:05
构造函数A(const string &b):i(0),s(b),d(0.0){};
最佳答案
- 五星知识达人网友:街头电车
- 2021-02-27 21:31
A a("hello"); 这样构造的函数,“hello”,相当于char[]的变量,而你构造函数中用的是string类型形参,这样必定造成传递的参数类型不匹配。
当传递的类型不匹配时,以前的老版编译器可以自动创建临时变量,上述编译在老版中将可行,但现在新版的将出现编译错误;在当前的新版编译器中,只有用const修饰的引用时,才会创建临时变量,所以就出现题主那种状况。
如果用:
string str="hello";
A a(str); 这样不加const编译也行
或A a((string)"hello"); 这样也可行
当传递的类型不匹配时,以前的老版编译器可以自动创建临时变量,上述编译在老版中将可行,但现在新版的将出现编译错误;在当前的新版编译器中,只有用const修饰的引用时,才会创建临时变量,所以就出现题主那种状况。
如果用:
string str="hello";
A a(str); 这样不加const编译也行
或A a((string)"hello"); 这样也可行
全部回答
- 1楼网友:鱼忧
- 2021-02-27 21:39
你是不是直接使用字符串常量来初始化类,如
A a("hello");
由于这个构造函数传递的是引用,"hello"作为一个常量,类型是const string,通过引用传递的话,必须是常量引用。追问是不是传递值是引用的话,实参是常量,这个引用也必须是常量的引用
如果实参是非常量,这个引用既可以是常量也可以是普通变量?追答对的,因为参数传递的过程包含类型转换,对常量的引用可以传入常量和变量参数,不会降低访问限制等级;而对变量的引用就不能传入常量了,因为有可能造成非法的修改。
A a("hello");
由于这个构造函数传递的是引用,"hello"作为一个常量,类型是const string,通过引用传递的话,必须是常量引用。追问是不是传递值是引用的话,实参是常量,这个引用也必须是常量的引用
如果实参是非常量,这个引用既可以是常量也可以是普通变量?追答对的,因为参数传递的过程包含类型转换,对常量的引用可以传入常量和变量参数,不会降低访问限制等级;而对变量的引用就不能传入常量了,因为有可能造成非法的修改。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯