3

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

       class A{

             A doSomething();

       };

       A A::doSomething(){

            //doing something 

       }

而不是这样做

       class A{

             A doSomething(){

                 //doing something 

             } 

       };

无论如何,我正在修改我教授的课程,我发现了这个:

Toute fonction member définie dans sa classe (dans la declaration de la classe) est considerée par le compilateur comme une fonction inline。Le mot clé inline n'est plus utilisé。

翻译成;

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

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

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

4

2 回答 2

9

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

如果您在没有inline或的标题中定义自由函数static并将该标题包含在多个翻译单元中,您将打破一个定义规则。

成员函数是相似的,除非标记为内联(它们隐含在类定义中)。

于 2013-05-21T21:27:52.913 回答
3

该关键字在 C++inline中并不表示内联,它仅表示可以在链接的不同翻译单元中看到完全相同函数的多个定义,而不会违反单一定义规则。

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

于 2013-05-21T21:29:09.463 回答