在类的定义中定义成员函数

Defining member functions inside the class' definition

本文关键字:定义 成员 函数      更新时间:2023-10-16

我一直想知道为什么我读过的大多数代码和教程总是在类内部声明成员函数,然后像这样在外部定义它。

       class A{
             A doSomething();
       };
       A A::doSomething(){
            //doing something 
       }

不这样做

       class A{
             A doSomething(){
                 //doing something 
             } 
       };

总之,我在修改教授的课程时发现了这个:

"Toute函数成员dsamfinie dansclass (dans la dsamacreation de la class)将把dsamfinie视为与编译器内嵌的一个函数。我们不清楚内联代码和实用程序代码。 "

翻译成;

"在其类(在类声明中)中定义的所有成员函数都被编译器视为内联函数。关键字'inline'不再使用"

我对内联函数的理解是它像宏一样工作。编译器将整个代码块复制到调用该函数的每个实例中。

我的问题是;我教授课程中的陈述是正确的吗?如果是,背后的原因是什么?

你的教授的陈述是正确的,你对inline的理解是错误的。inline函数允许跨翻译单元的多个定义,并不一定意味着调用实际上是内联的(即像宏一样展开)。

如果你在没有inlinestatic的头文件中定义一个自由函数,并且在多个翻译单元中包含该头文件,你将打破一个定义规则。

成员函数是类似的,除非标记为内联(它们隐式地位于类定义中)。

关键字inline在c++中并不意味着内联,它只意味着在不同的翻译单元中可以看到完全相同函数的多个定义,这些定义被链接起来,而不会违反单一定义规则。

考虑到这一点,在类定义内定义的成员函数是隐式内联的。包含该头文件的所有翻译单元都可以生成相同的符号,并且链接器将丢弃除其中一个外的所有符号。