关于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); // 成功
} 展开
{ 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); // 成功
} 展开
展开全部
这跟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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询