• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2013-04-19)  C++ |   3 条评论  7 
    文章评分 0 次,平均分 0.0

    在标准C++语言中,临时量(术语为右值,因其出现在赋值表达式的右边)可以被传给函数,但只能被接受为const &类型。这样函数便无法区分传给const &的是真实的右值还是常规变量。而且,由于类型为const &,函数也无法改变所传对象的值。C++0x将增加一种名为右值引用的新的引用类型,记作typename &&。这种类型可以被接受为非const值,从而允许改变其值。
    比如:

    int &a = 1;
    const int &b = 1;

    第一行出错,用类型为‘int’的右值初始化类型为‘int&’的非常量引用无效。
    第二行则正确。

    对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。
    左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值。下面给出一些例子来进行说明。
    int a = 10;
    int b = 20;
    int* pFlag = &a;
    vector vctTemp;
    vctTemp.push_back(1);
    string str1 = "hello ";
    string str2 = "world";
    const int &m = 1;
    请问,a,b, a+b, a++, ++a, pFlag, *pFlag, vctTemp[0], 100, string("hello"), str1, str1+str2, m分别是左值还是右值?bf096b63f6246b6040f07b9eebf81a4c500fa25a

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/776.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享