Scala/C++:Tail递归函数而不是输入循环

Big*_*olf 5 c++ tail-recursion

自从我进入Scala后,我开始使用尾递归编写函数,并了解到C++编译器也支持它,甚至优化尾递归函数.现在我很好奇优化的可靠性,并且可以将它用于我的主循环或命令提示符之类的东西吗?

传统上我写了这样的命令提示:

bool running = true;
string input;
while(running_){
  input = getInput();
  executeCommand(input);
  if(input == "quit") running_ = false;
}
Run Code Online (Sandbox Code Playgroud)

现在用这样的尾递归函数替换它会是一件坏事吗?

string input = "nothing";
void parseInput(){
  if(input != "nothing") executeCommand(input);

  getline(cin, input);
  if(input != "quit") parseInput();
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*eyA 2

不同的编译器以不同级别的可靠性应用 TCO(尾部调用优化)。在您的特定情况下,如果在分支内调用后不立即返回,则编译器会变得更加困难。编译器必须采取额外的步骤来确保调用完成后不会执行任何代码。

为了确保 TCO 确实发生,您必须依靠您最好的朋友。你最好的朋友是 asm 输出。