4

关于结构成员函数的 C++ 问题。

除了他们的名字f1()和有什么不一样?f2()

 struct F{
   int f1(){
      return 0;  
    }
    int f2();    
 }; 
 int F::f2(){
     return 0;
 }

我可以说f1()是 inline 但f2()不是吗?

4

1 回答 1

11

您是正确的,它f1是内联的,f2而不是内联的,但这不仅仅是因为它是在类中定义的。f2如果它被定义为也可以是内联的

inline int F::f2() {
    return 0;
}

C++11 规范第 9.3 节说f1“在其类定义中定义”并且f2“在其类定义之外定义”。然后它声明在其类定义中定义的任何函数都是内联的,而在其类定义之外定义的函数必须显式标记为内联(如我上面的示例),否则它们是非内联的(如你的f2)。

除了使函数隐式内联之外,类定义内部与定义外部并不重要。类定义内部和类定义外部的概念仅出现在 9.3.2-9.3.5 中,而更广泛的“内联”概念出现在规范的其他部分。

于 2013-09-11T23:33:12.507 回答