常量不能被引用符& 引用

来源:互联网 发布:天刀本地网络异常 编辑:程序博客网 时间:2024/06/05 06:39

今天和朋友讨论了一道题目,原题如下:

 2
string foo( );
void bar(string & s);
那么下面的表达式将是非法的:
bar(foo( ));
bar("hello world");

 

其中bar("hello world");为什么是非法的呢。刚开始我们觉得因为“hello world”是一个常量,存储在静态存储区里,不能作为函数参数。

这个判断是我们的惯性思维惹的祸,把问题的原因想偏了,其实,问题的原因是因为函数的参数因该是string &类型的,而"helloworld"实际上是 const char[11]类型,错误原因是类型不匹配。

 

百度百科里对这个问题也给出了答案:

     原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。

  备注:引用型参数应该在能被定义为const的情况下,尽量定义为const 。

 

 

原创粉丝点击