我正在编译下一个简单的示例:

#include <iostream>

struct PP
{
    inline void wInline();
}

inline void PP::wInline()
{
    std::cout << "hola" << endl;
}

int main()
{
    PP pp;
    pp.wInline();
    return 0;
}

通过这种方式:
g++ -O0 -finline-functions -finline-functions-called-once
-finline-small-functions -Wall -Wextra -pedantic -std=c++11 -Winline
main.cpp

与gcc 4.8.2和wInline不被内联。

-finline-functions,-finline-functions-once和
-finline-small-functions标志够吗?
为什么即使启用-Winline标志也没有警告?

最佳答案

inline关键字是优化程序的提示。由于您正在使用-O0进行编译,因此不会进行优化。

gcc documentation表示有关-Winline的信息:



有什么规则可以声明为inline以及gcc用来决定是否应内联声明为inline的函数的启发式规则。

您可以阅读有关inline关键字here的更多信息。

(为回答第二个问题而编辑。)

10-07 12:03