运算符优先级的问题: 前后都有运算符,是"右结合"优先吗?
例如,我定义一个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