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

有关const的一个有关问题

2013-04-26 
有关const的一个问题//当const 去掉的时候,位置(1)的调用报错,而含有const的时候,//则不会void func(const

有关const的一个问题


//当const 去掉的时候,位置(1)的调用报错,而含有const的时候,
//则不会
void func(const double& a)
{
}

int main()
{
   int a = 3;
   func(a);//.................(1)
}
const C++
[解决办法]
这个问题好像,以前在论坛里面有人问过。

非const引用只能绑定到与该引用同类型的对象。
const引用则可以绑定到不同但相关的类型的对象或绑定到右值(作为行参的时候有效)

[解决办法]
引用:
引用:这个问题好像,以前在论坛里面有人问过。

非const引用只能绑定到与该引用同类型的对象。
const引用则可以绑定到不同但相关的类型的对象或绑定到右值(作为行参的时候有效)

你这种理论是哪里来的啊?


《C++ Primer》 

[解决办法]
函数调用的过程中会创建临时变量,类型为 double,临时变量只能绑定到 const 引用上,就这样。
[解决办法]
首先parameter(形参)是一个double,argument(实参)是一个int
根据调用规则会隐式生成一个临时变量double tmp(a),然后把tmp传给函数
这里的tmp是一个右值,即不允许对其赋值。

const &是标准的右值引用,所以没有问题。

没有const的&是左值引用,用户可以修改传入参数,所以c++不允许右值绑定到左值引用上,造成tmp无法传递给函数,调用失败。

c++11中引入了右值引用&&,所以写成下述形式应该也可以


void func(double&& a)
{
}

热点排行