joseph_tyrone 2018-07-06 07:25 采纳率: 100%
浏览 1427
已采纳

到底怎么确定函数调用表达式的结果是左值还是右值?

《C++primer》(第五版)P129页中说道:赋值运算符的左侧运输对象必须是一个可修改的左值。_
还有很多人说:左值右值的判定是:看能否使用取地址运算符,能用的是左值。
P202说到:函数的返回类型决定函数调用是否是左值。调用一个返回引用的的函数得到左值,其他返回类型得到右值。
请看看下面的代码,为什么该函数调用可以被用在赋值符左侧,也可以使用取地址运算符?但是最后一个表达式却是错的,说是:非常量引用只能绑定到左值。
到底怎么确定函数调用表达式的结果是左值还是右值?
string shortStr(string s1, string s2)
{
return s1.size() <= s2.size() ? s1 : s2;
}
int main( )
{
string str1 = "abcd", str2 = "efghi";
shortStr(str1, str2) = "oooo"; //A
string *ps=&(shortStr(str1, str2)); //B
string &rs = shortStr(str1,str2); //C
system("pause");
return 0;
}

  • 写回答

6条回答 默认 最新

  • zhenjun_ma 2018-07-06 08:02
    关注

    左值右值的形式区分(或者称语法区分)是能否用取地址&运算符;语义区分(即其本质涵义)在于表达式代表的是持久对象还是临时对象。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。