我试图搜索,但无法找到:函数的必要条件是什么,以便gcc优化尾递归?是否有任何参考或列表包含最重要的案例?由于这是版本特定的,我的兴趣是4.6.3或更高版本(越新越好).但事实上,任何具体的参考资料都将受到高度赞赏.
提前致谢!
最近,我很惊讶以下代码也在 clang、gcc 和 msvc 中编译(至少在它们当前的版本中)。
struct A {
static const int value = 42;
};
constexpr int f(A a) { return a.value; }
void g() {
A a; // Intentionally non-constexpr.
constexpr int kInt = f(a);
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,调用f不是 constexpr 因为参数i不是,但看来我错了。这是适当的标准支持的代码还是某种编译器扩展?