-> 运算符的优先级比 后递增 高,为什么还先执行iter++?前递增的优先级也没->高,甚至比后递增还低,为什么不先执行++iter ?
时间: 2024-05-25 10:12:49 浏览: 122
运算符的优先级只决定了表达式中各个运算符的执行顺序,但不决定操作数的求值顺序。在表达式 `iter->` 中,首先要求得 `iter` 的值,然后再执行箭头运算符 `->`,因此 `iter++` 会先执行,然后再执行箭头运算符 `->`。
另外,对于前缀递增运算符和后缀递增运算符的优先级,它们的优先级相同,但是它们的执行顺序是不同的。前缀递增运算符会先执行递增操作,然后将新值作为表达式的值,而后缀递增运算符会先将表达式的值保存下来,然后再执行递增操作。因此,在表达式中使用前缀递增运算符和后缀递增运算符时,根据具体的需求选择合适的运算符即可。
相关问题
假设iter的类型是vector<string>::iterator,说明下面的表达式是否合法。如果合法,表达式的含义是什么?如果不合法,错在何处? (a) *iter++ (b)(*iter)++; (c)*iter.empty(); (d) iter->empty() (e)++*iter; (f)iter++->empty(); —
这个问题是技术问题,可以回答。以下是各个表达式的含义和合法性判断:
(a) *iter:表示取迭代器 iter 指向的元素的值,合法。
(b) (*iter);表示取迭代器 iter 指向的元素的值,合法。
(c) *iter.empty();不合法。迭代器没有 empty() 成员函数。
(d) iter->empty();如果迭代器指向的对象有 empty() 成员函数,则表示调用 empty() 函数;否则不合法。
(e) *iter;表示取迭代器 iter 指向的元素的值,合法。
(f) iter->empty();如果迭代器指向的对象有 empty() 成员函数,则表示调用 empty() 函数;否则不合法。
给下面每一行代码给上注释#include "pch.h" #include "FinBudgetFlowManager.h" int FinBudgetFlowManager::C(double _value, time_t _time, CString _remark, FlowType _type) { FinBudgetFlow* pFBD = new FinBudgetFlow(); pFBD->setValue(_value); pFBD->setTime(_time); pFBD->setRemark(_remark); pFBD->setType(_type);; this->FlowMap.insert(std::map<int, FinBudgetFlow*>::value_type(this->getSize(), pFBD)); return this->getSize()-1; } bool FinBudgetFlowManager::U(int _index, double _value, time_t _time, CString _remark, FlowType _type){ std::map<int, FinBudgetFlow*>::iterator iter; iter = this->FlowMap.find(_index); if (iter != this->FlowMap.end()) { delete iter->second; iter->second = NULL; this->FlowMap.erase(iter); FinBudgetFlow *pFBD = new FinBudgetFlow(); pFBD->setValue(_value); pFBD->setTime(_time); pFBD->setRemark(_remark); pFBD->setType(_type); this->FlowMap.insert(std::map<int, FinBudgetFlow*>::value_type(_index, pFBD)); return true; } else { throw _index; } } FinBudgetFlow* FinBudgetFlowManager::R(int _index) { std::map<int, FinBudgetFlow*>::iterator iter; iter = this->FlowMap.find(_index); if (iter != this->FlowMap.end()) { return iter->second; } else { throw _index; } } bool FinBudgetFlowManager::D(int _index) { std::map<int, FinBudgetFlow*>::iterator iter; iter = this->FlowMap.find(_index); if (iter != this->FlowMap.end()) { delete iter->second; iter->second = NULL; //防止野指针这一步是否真的需要? this->FlowMap.erase(iter); return true; } else { throw _index; } } int FinBudgetFlowManager::getSize() { return FlowMap.size(); }
//引入预编译头文件
#include "pch.h"
//引入头文件"FinBudgetFlowManager.h"
#include "FinBudgetFlowManager.h"
//定义函数C,返回类型为int,参数为value,time,remark和type
int FinBudgetFlowManager::C(double _value, time_t _time, CString _remark, FlowType _type) {
//创建一个新的FinBudgetFlow对象
FinBudgetFlow* pFBD = new FinBudgetFlow();
//设置新对象的value
pFBD->setValue(_value);
//设置新对象的time
pFBD->setTime(_time);
//设置新对象的remark
pFBD->setRemark(_remark);
//设置新对象的type
pFBD->setType(_type);;
//将新对象插入到FlowMap中
this->FlowMap.insert(std::map<int, FinBudgetFlow*>::value_type(this->getSize(), pFBD));
//返回FlowMap的大小减一
return this->getSize()-1;
}
//定义函数U,返回类型为bool,参数为index,value,time,remark和type
bool FinBudgetFlowManager::U(int _index, double _value, time_t _time, CString _remark, FlowType _type){
//定义一个迭代器
std::map<int, FinBudgetFlow*>::iterator iter;
//在FlowMap中查找index
iter = this->FlowMap.find(_index);
//如果找到了
if (iter != this->FlowMap.end()) {
//删除原有对象
delete iter->second;
iter->second = NULL;
//从FlowMap中删除原有对象
this->FlowMap.erase(iter);
//创建一个新的FinBudgetFlow对象
FinBudgetFlow *pFBD = new FinBudgetFlow();
//设置新对象的value
pFBD->setValue(_value);
//设置新对象的time
pFBD->setTime(_time);
//设置新对象的remark
pFBD->setRemark(_remark);
//设置新对象的type
pFBD->setType(_type);
//将新对象插入到FlowMap中
this->FlowMap.insert(std::map<int, FinBudgetFlow*>::value_type(_index, pFBD));
//返回true
return true;
}
//如果没有找到
else {
//抛出异常
throw _index;
}
}
//定义函数R,返回类型为FinBudgetFlow*,参数为index
FinBudgetFlow* FinBudgetFlowManager::R(int _index) {
//定义一个迭代器
std::map<int, FinBudgetFlow*>::iterator iter;
//在FlowMap中查找index
iter = this->FlowMap.find(_index);
//如果找到了
if (iter != this->FlowMap.end()) {
//返回找到的对象
return iter->second;
}
//如果没有找到
else {
//抛出异常
throw _index;
}
}
//定义函数D,返回类型为bool,参数为index
bool FinBudgetFlowManager::D(int _index) {
//定义一个迭代器
std::map<int, FinBudgetFlow*>::iterator iter;
//在FlowMap中查找index
iter = this->FlowMap.find(_index);
//如果找到了
if (iter != this->FlowMap.end()) {
//删除对象
delete iter->second;
iter->second = NULL;
//从FlowMap中删除对象
this->FlowMap.erase(iter);
//返回true
return true;
}
//如果没有找到
else {
//抛出异常
throw _index;
}
}
//定义函数getSize,返回类型为int
int FinBudgetFlowManager::getSize() {
//返回FlowMap的大小
return FlowMap.size();
}
阅读全文