《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;
}
到底怎么确定函数调用表达式的结果是左值还是右值?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- zhenjun_ma 2018-07-06 08:02关注
左值右值的形式区分(或者称语法区分)是能否用取地址&运算符;语义区分(即其本质涵义)在于表达式代表的是持久对象还是临时对象。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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如何向数据库中添加自动生成的字段数据。