C++中内联函数的编译器优化

1 c++ inlining compiler-optimization

当内联参数中的指针的函数被内联时,编译器是否在优化过程中删除了间接?当然,当它有意义..

这是一个明显的例子:

inline void say_hello (person* p) {
    std::cout << "hello " << p->name << std::endl;
}

int main () {
    person goldorak;
    goldorak.name = "Goldorak";

    say_hello(&goldorak);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这种情况是微不足道的,但如果编译器确实进行了优化,那么在某些情况下它不会?

额外奖励:我在哪里可以获得编译器进行的一些"基本"优化列表?

Ps:我只是很好奇

Lyn*_*ite 5

我假设是GCC,所以你要找的链接是http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

引用:(这可能不是你得到的)

-findirect-inlining Inline也是由于以前的内联而发现在编译时已知的间接调用.仅当-finline-functions或-finline-small-functions选项打开内联本身时,此选项才有效.

Enabled at level -O2.
Run Code Online (Sandbox Code Playgroud)

Visual Studio编译器(包括C++)的等效文档 http://msdn.microsoft.com/en-us/library/k1ack8f1.aspx (您可以按照链接获取更多信息)