今天我在我的 C++ 代码中犯了一个有趣的错误。我有一个带有两个类型参数std::vector<int>::iterator&
(i
和j
)的函数。迭代器应该指向同一个向量。函数应该返回向量中两个数字的和,并将两个迭代器向前移动到向量的第 j+1 个位置:
int exp_func_add::evaluate(vector<int>::iterator& i, vector<int>::iterator& j) {
int result = *i + *j;
++j;
i = j;
return result;
}
首先我写了这段代码:
int exp_func_add::evaluate(vector<int>::iterator& i, vector<int>::iterator& j) {
++j;
i = j;
return (*i+*j); // <====== Oops !
}
我们知道该return
语句将控制权返回给调用者。我的问题是为什么 C++ 标准没有定义延迟值返回语义?我们称之为late_return
关键字:
int exp_func_add::evaluate(vector<int>::iterator& i, vector<int>::iterator& j) {
late_return *i+*j; // Hold return value but don't go back
// to the caller until leaving scope
++j;
i = j;
}
这个问题可能会得到数百个反对票(不是建设性的,等等)。虽然我想问一些问题:
- 有没有办法使用宏或任何其他技巧来模拟这种行为?
- 这是否值得实现或被视为下一个 c++ 标准中的一个特性?
- 是否有实现类似功能的编程语言?