构造函数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是类名 展开
声明为const的引用就对了?
i为int,s为的string,d为double
A是类名 展开
2个回答
展开全部
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"); 这样也可行
展开全部
你是不是直接使用字符串常量来初始化类,如
A a("hello");
由于这个构造函数传递的是引用,"hello"作为一个常量,类型是const string,通过引用传递的话,必须是常量引用。
A a("hello");
由于这个构造函数传递的是引用,"hello"作为一个常量,类型是const string,通过引用传递的话,必须是常量引用。
追问
是不是传递值是引用的话,实参是常量,这个引用也必须是常量的引用
如果实参是非常量,这个引用既可以是常量也可以是普通变量?
追答
对的,因为参数传递的过程包含类型转换,对常量的引用可以传入常量和变量参数,不会降低访问限制等级;而对变量的引用就不能传入常量了,因为有可能造成非法的修改。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询