我有在 Debian (gcc (Debian 4.7.2-5) 4.7.2) 中正常工作的 c++ 代码,但在 Ubuntu (gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2) 中失败。我正在变量之间重用堆栈空间,类似于这些问题中描述的内容:
除了我没有嵌套范围。相反,代码看起来类似于:
TreeWalker walker;
walker.addVisitor(nodeType1, Visitor1());
walker.addVisitor(nodeType2, Visitor2());
...
walker.walkTree(tree);
我可以通过在堆上分配来缓解这个问题,但我想知道我能做些什么来确保局部变量留在原地?将访问者分配给局部变量是否足以确保它们不会被重用?在函数代码中最后一次使用堆栈变量后,标准是否对堆栈变量提供了任何承诺?