Mar*_*ace 0 c++ optimization recursion forward-declaration compiler-optimization
我们可以转发声明一个函数:
void func1();
void func2() {
// use func1
}
void func1() {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
func1如果调用以下命令,这可能是必要的func2:
void func1();
void func2() {
func1();
}
void func1() {
if (condition) {
func2();
}
}
Run Code Online (Sandbox Code Playgroud)
虽然func1第二个示例中的内联并不困难,但我不知道在任意复杂的程序中是否存在此类编译器优化的理论障碍。在第二种情况下,前向声明是必要的,并且可能会丢失与程序的递归性质相关的编译器优化。
问题:当不需要但仍然使用前向声明时(例如第一个示例),任何主要编译器(gcc、clang、msvc)上是否会丢失任何编译器优化?
据我所知,冗余的前向声明不会抑制任何编译器优化。最坏的情况是,它们会提供一些额外的标记供编译器读取和处理,然后丢弃(可以忽略不计)。在某些情况下,前向声明可以改变后面代码的含义,在这种情况下,当然可能会对编译器优化器产生后续影响(但在这种情况下,您可能希望行为改变,所以不你可以做很多事情 - 它甚至可能是一个积极的影响)。
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |