今日、私は C++ コードで面白い間違いをしました。std::vector<int>::iterator&
タイプ(i
および)の2つの引数を持つ関数がありますj
。イテレータは同じベクトルを指す必要があります。関数はベクトル内の 2 つの数値の合計を返し、両方の反復子をベクトルの 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++ 標準の機能と見なされますか?
- 同様の機能を実装するプログラミング言語はありますか?