【问题标题】:How to tell the compiler to not inline methods that are defined within the class definition, under /ob1 optimization?如何告诉编译器不要在 /ob1 优化下内联类定义中定义的方法?
【发布时间】:2012-12-03 15:51:21
【问题描述】:

当使用优化选项 /Ob1 编译 Visual C++ 项目时,只有带有关键字 __inline / inline 的函数或在类定义中定义的函数才会被内联(即使这样也不一定,但前提是编译器认为它合适)。

我的问题是,是否可以告诉编译器(在 Visual C++ 下)仅内联使用 inline 关键字内联定义的函数,而不是在 /Ob1 优化选项下内联定义在类定义中的方法?

g++ 编译器是否与 Windows 上的 /Ob1 选项相同(比如说,在 g++ -O3 选项下),它是否内联定义在类定义中的成员方法?如果是,有没有办法告诉它只内联带有 inline 关键字的类定义之外的函数?

【问题讨论】:

    标签: c++ visual-c++ g++ inline


    【解决方案1】:

    C++ 标准(第 7.1.2/3 节)指定在类定义中定义的函数被隐式声明为内联,主要是因为它们需要不违反单一定义规则。所以你所要求的基本上是一个不内联声明为内联(隐式)的函数的选项。 如果您不想将函数声明为内联(无论出于何种原因),则不应在类定义中定义它。

    【讨论】:

    • C++11 标准中的第 7.1.2/3 节:在类定义中定义的函数是内联函数。内联说明符不应出现在块作用域函数声明中。
    • 感谢您查阅 §§s :-)
    • 不客气。如果您愿意,可以将其添加到您的答案中。
    【解决方案2】:

    使用#pragma optimize逐个函数指定优化指令:http://msdn.microsoft.com/en-us/library/chh3fb0k%28v=vs.100%29.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多