如果 C++ 结构成员函数定义在结构体之外定义,它们会有差异吗?

标签 c++ struct inline member

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

除了名称之外,f1()f2() 之间有什么区别?

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

我可以说 f1() 是内联的但 f2() 不是吗?

最佳答案

f1 是内联而 f2 不是内联是正确的,但它不只是因为它是在类内部定义的。 f2 如果定义为

也可以是内联的
inline int F::f2() {
    return 0;
}

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

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

关于如果 C++ 结构成员函数定义在结构体之外定义,它们会有差异吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752944/

相关文章:

c# - C# 会内联在接口(interface)中声明的方法吗?

c++ - 如何更改静态文本控件(winapi)的字体?

c++ - 检查 std::map 的迭代器是否指向倒数第二个元素

Python struct.pack() 在脚本中不起作用

c++ - 是否可能/建议将 vector 存储在结构中? C++

c++ - C++ 中的宏会提高性能吗?

c++ - 为回调函数传递参数

c++ - 使用 128 位种子的伪随机排列

c++ - 如何在类中使用结构

javascript - 如何删除 element.style