读书人

运算符优先级的有关问题: 前后都有运算

发布时间: 2012-09-06 10:37:01 作者: rapoo

运算符优先级的问题: 前后都有运算符,是"右结合"优先吗?
例如,我定义一个map类型:
std::map<size_t,string> mm;
...
auto iterator=mm.begin;
size_t x=++iterator->first;//问题在这里。
请问上面这句应该是先迭代器+1再返回first给x
还是返回当前迭代器引用的first+1的值?

也就是++和->都出现在iterator周围,那么是优先++呢(优先级高)还是右结合operator->优先?
这个C++标准有确定的说法么?


[解决办法]
从来不记各种符号的优先级
一贯使用单括号来控制运算次序

楼主的问题我不知道答案,我只说这个答案不必知道也没关系
[解决办法]
查一下优先级吧,应该是->优先级高。
[解决办法]
分成2个语句吧
[解决办法]
事实上前置++的优先级是低于->的。基本规则是前置的(如*,&,-,!等)都低于后置的(如[],(),.,->,)

++,--的特殊性:
许多地方将前置++与后置++放在一起,用右结合性来区别,也能区分开来

本例“=++iterator->first”
用优先级解释,后置的->高于前置的++,所以++(iterator->first),++的对象是first
用结合性解释,右面的->先结合,(iterator->first),++后结合,++的对象仍是first

读书人网 >C++

热点推荐