构造函数A(const string &b):i(0),s(b),d(0.0){};

为什么非const的引用就出错?如:A(string&b):i(0),s(b),d(0.0){};声明为const的引用就对了?i为int,s为的string,d为dou... 为什么非const的引用就出错?如:A(string &b):i(0),s(b),d(0.0){};
声明为const的引用就对了?
i为int,s为的string,d为double
A是类名
展开
 我来答
百度网友244f9a8
推荐于2018-03-24
知道答主
回答量:3
采纳率:100%
帮助的人:2499
展开全部
A a("hello"); 这样构造的函数,“hello”,相当于char[]的变量,而你构造函数中用的是string类型形参,这样必定造成传递的参数类型不匹配。
当传递的类型不匹配时,以前的老版编译器可以自动创建临时变量,上述编译在老版中将可行,但现在新版的将出现编译错误;在当前的新版编译器中,只有用const修饰的引用时,才会创建临时变量,所以就出现题主那种状况。
如果用:
string str="hello";
A a(str); 这样不加const编译也行
或A a((string)"hello"); 这样也可行
cherayc
推荐于2016-08-29
知道答主
回答量:10
采纳率:0%
帮助的人:8.7万
展开全部
你是不是直接使用字符串常量来初始化类,如
A a("hello");
由于这个构造函数传递的是引用,"hello"作为一个常量,类型是const string,通过引用传递的话,必须是常量引用。
追问
是不是传递值是引用的话,实参是常量,这个引用也必须是常量的引用

如果实参是非常量,这个引用既可以是常量也可以是普通变量?
追答
对的,因为参数传递的过程包含类型转换,对常量的引用可以传入常量和变量参数,不会降低访问限制等级;而对变量的引用就不能传入常量了,因为有可能造成非法的修改。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式