gpt4 book ai didi

c++ - C++ 延迟返回值

转载 作者:太空狗 更新时间:2023-10-29 20:26:59 27 4
gpt4 key购买 nike

今天我在 C++ 代码中犯了一个有趣的错误。我有一个带有两个 std::vector<int>::iterator& 类型参数的函数( ij )。迭代器应该指向同一个 vector 。函数应返回 vector 中两个数字的和,并将两个迭代器向前移动到 vector 的第 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;
}

这个问题可能会得到数百票否决票(没有建设性,等等)。虽然我想问一些问题:

  1. 有没有办法使用宏或任何其他技巧来模拟此行为?
  2. 这是否值得在下一个 c++ 标准中实现或被视为一项功能?
  3. 是否有实现类似功能的编程语言?

最佳答案

  • 有没有办法使用宏或任何其他技巧来模拟此行为?

并非如此,尽管您的第一个代码示例是相本地道的 C 或 C++ 代码。“为“结果”赋值,然后将“返回结果”作为函数的最后一个语句是一种非常常见的模式。

  • 这是否值得在下一个 c++ 标准中实现或被视为一项功能?

不,因为它增加了复杂性,但与现有习语相比没有任何明显优势。它也会为该语言添加一大堆边缘情况。函数可以有多个 return 语句,那么如何处理多个 late_return 语句呢?第一个赢了?最后一个赢了?抛出异常?包含 late_return 和 return 的代码路径怎么样?

  • 是否有实现类似功能的编程语言?

我能想到的最接近的东西是约束语言或逻辑语言,如 Prolog,一旦提供了产生它所需的所有数据,就会产生“结果”。

关于c++ - C++ 延迟返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17638383/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com