关于C++ 参数被const修饰符修饰的语法含义

voidMyswap(T&a,T&b){Ttemp=a;a=b;b=temp;}intmain(){intia=3;doubledb=5.0;Myswap(ia,db);... void Myswap(T & a, T & b)
{ T temp=a; a=b; b=temp;}
int main()
{
int ia=3;
double db=5.0;
Myswap( ia, db); // error 类型不匹配 这个错误很明显
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
用强制类型转化static_cast<double>(ia)

void Myswap(T & a, T & b)
{ T temp=a; a=b; b=temp;}

int main()
{
int ia=3;
double db=5.0;
Myswap(static_cast<double>(ia), db); // 不明白为什么仍然报错,按说已经强制类型转换了啊
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
正确代码事例,在Myswap函数参数列表中,加入了const修饰符
void Myswap(T const & a, T const & b) //不明白为什么 在参数列表中加入const修饰符,再用强制类型转化,就会成功呢?
{ T temp=a; a=b; b=temp;}

int main()
{
int ia=3;
double db=5.0;
Myswap(static_cast<double>(ia), db); // 成功
}
展开
 我来答
南瓜猪的的的
推荐于2016-10-03 · TA获得超过1297个赞
知道小有建树答主
回答量:1598
采纳率:0%
帮助的人:407万
展开全部

这跟const没有关系 

你输入了右值 (编译器自动加的const)

 好好看看右值 左值 抛弃老版本编译器

template<class _Ty> inline
void swap(_Ty& _Left, _Ty& _Right)
_NOEXCEPT_OP(is_nothrow_move_constructible<_Ty>::value
&& is_nothrow_move_assignable<_Ty>::value)
{ // exchange values stored at _Left and _Right
_Ty _Tmp = _Move(_Left);
_Left = _Move(_Right);
_Right = _Move(_Tmp);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式