传递引用作为函数参数时,实参不能是表达式。
传递引用时,并且参数为const时。
当参数类型不匹配,但是可以转换的,会创建一个临时变量,
当实参不是一个左值(例如表达式),会创建一个临时变量,
临时变量的生存期为函数调用时期。
左值是可寻址的变量,有持久性;
右值一般是不可寻址的常量,或在表达式求值过程中创建的无名临时对象,短暂性的。
左值和右值主要的区别之一是左值可以被修改,而右值不能。
用const和非const 的数据类型 来实现函数重载,适用于指针和引用,非const 数据的指针和 引用优先和非const 指针和 引用参数匹配
重载时,在模板实例化和普通函数之间,非模板函数优于模板函数, 若两个都是模板函数,则 优先更匹配的(更具体的
关键字 decltype (c++11
decltype (参数) 变量名称 ;(参数可以是表达式或者左值
作用:当目前不清楚这个变量 的数据类型时,给一个变量一个未来的数据类型。
例子:
template <class T1,class T2>
void ft( T1 t1,T2 t2)
{
//此时并不知道xpy 的数据类型。
? type ? xpy = x + y;
//此时利用 decltype ,xpy 的数据类型会在x y 的数据类型确定之后随之确定。
decltype(x + y) xpy = x + y;
}
c++后置返回类型
template <class T1,class T2>
void ft( T1 t1,T2 t2) ->decltype(x+y)
{
//此时并不知道xpy 的数据类型。
return x + y;
//错误的使用,原因是此时还未声明x y,他们不在作用域内 (c++书上的,还是没太理解)
return decltype(x+y)
}