常量引用作为参数时既可以接受左值,也可以接受右值。
例如
double & i = 1; error
double const & j = 1;
这里插入一点对左值右值的理解,在赋值语句中只能出现在右边的就是右值,既能出现在左边又能出现在右边的就是左值。
不能取地址(临时变量)的就是右值,可以取地址(持久变量)的就是左值。
所以可以这么理解,右值是定以后不能改变的,所以必须是常量引用.
常量引用做参数时的情况:
int test1(int & i); 只能接受左值
int test2(int const & i); 可以接受左值和右值
overload的情况:
int test(int & );
int test(int const &);
test(1); 调用 int test(int const &);
test(i); 调用 int test(int & );
但是实际上 常量引用时也是可以传入左值的,所以这样做有些歧义。
在C++中的右值引用和mov语义( type&& )这个概念,当一个构造函数接受右值引用时它不会分配新的空间,而
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26899445/viewspace-757349/
,如需转载,请注明出处,否则将追究法律责任。