比方说,我们有超过分配给堆空间内存指针列表的迭代器(ITER),如果我这样做C++运算符优先级
delete (*iter++)
我是正确的优先级是第一个提领迭代器取得内存地址然后释放空间,然后增加迭代器释放下一个元素?
比方说,我们有超过分配给堆空间内存指针列表的迭代器(ITER),如果我这样做C++运算符优先级
delete (*iter++)
我是正确的优先级是第一个提领迭代器取得内存地址然后释放空间,然后增加迭代器释放下一个元素?
的效果是你写的,但它使用一个稍微不同的顺序来实现:
的后递增具有最高的优先级,所以它的第一评价。但是,其返回值(由其他运营商处理)的值为iter
之前的的增量。
下一步评估解除引用,返回iter
未增加的值“指向”的指针。
delete
最后被评估,指针被删除。
虽然++
has higher precedence than *
,后期增量++
的副作用后应用的引用操作*
采用了迭代器的值。这是后增量行为,或后缀++
(与预增量相反,或前缀++
)。这条规则适用于迭代器以及“普通”指针。
该生产线是相同的:
delete (*(iter++))
但由于后缀增量返回原来的价值,你还在提领的iter
原始值。因此,如果iter
指向指向动态分配对象的指针,则delete
将销毁该对象。然后iter
会一直指向下一个指针。
的优先实际上是反向,并且如果所述迭代器类型(带重载操作符)的,这是调用给操作者功能的顺序:
iter
用于调用的列表项的值。
不要编写需要太多的代码,但要弄清楚发生了什么 - 最好将其分散到几行。这样你可以防止现在或将来的错误。 – 2013-03-08 13:47:34
为了确保我能理解幕后发生的事情...... – user1845360 2013-03-08 13:56:30