右值引用与常量引用的区别

void m(int &&i)//函数1
{
    cout<<"m &&:"<<i<<endl;
}

void m(const int &i)//函数2
{
    cout<<"m const &:"<<i<<endl;
}

const int ci = 0,*p2 = &ci;
m(10);
m(ci);

如上代码,若函数m(10)调用函数1,函数m(ci)调用函数2;
若注销函数1,则都调用函数2,即右值可以传递给常引用;
若注销函数2,则m(ci)报错,即常引用不能传递给右值引用;
哪位大神还能具体讲讲这两者的区别吗?

阅读 4.3k
1 个回答
  1. c++会自动选择函数签名最匹配的m进行调用。
  2. const int &i = 10const int &i = ci都是合法的
  3. int &&i = ci 不合法,因为ci的内容是不可变的
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题