C++Primer第五版第四章练习4.20

文章讨论了关于C++中vector<string>迭代器的各种操作,如(a)合法但含义是移动并返回原值,(b)非法因为string类型不支持自增,(c)非法因迭代器无empty成员,(d)合法等,强调了运算符优先级和合法性的区别。

/*
练习4.20:
假设iter的类型是vector<string>::iterator, 说明下面的表达式是否合法。如果合法,表达式的含义是什么?如果不合法,错在何处?
(a)*iter++;
合法:
后置递增运算符的优先级高于解引用运算符,都满足右结合律。
iter向前移动一个位置,返回iter改变前的值,解引用iter改变之前的值,

(b)(*iter)++
不合法。解引用iter, 因为类型是string, 加1没有意义。

(c)*iter.empty()
成员选择点运算符优先级与函数调用运算符相同,都满足左结合律。
解引用运算符优先级较低,满足右结合律。
迭代器,没有empty成员。
不合法。

(d)iter->empty();
等价于:(*iter).empty();
合法

(e)++*iter;
优先级方面:前置递增运算符与解引用相同。结合律方面:均满足右结合律。
先对iter解引用,解引用的对象是string类型,执行自增运算没有意义。
不合法

(f)iter++->empty()
等价于:(*(iter++)).empty()
含义:iter++返回改变之前的值,iter向前移动一个位置,解引用改变之前的值,判断是否为空。
合法
*/
#include "TouWenJian_4.h"

int main()
{

    return 0;
}


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值