C++ 在类内定义成员函数';定义

C++ 在类内定义成员函数';定义,c++,class,inline,C++,Class,Inline,我一直想知道为什么我读过的大多数代码和教程总是在类内部声明成员函数,然后在类外部像这样定义它 class A{ A doSomething(); }; A A::doSomething(){ //doing something } 而不是这样做 class A{ A doSomething(){ //

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

       class A{

             A doSomething();

       };

       A A::doSomething(){

            //doing something 

       }
而不是这样做

       class A{

             A doSomething(){

                 //doing something 

             } 

       };
无论如何,我在修改教授的课程时发现:

“Touth-FuntIn DaSSa Clase(DaS La Dead Clulde de La Clase)) 翻译成:

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

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


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

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

如果在没有
内联
静态
的标题中定义自由函数,并将该标题包含在多个翻译单元中,则将违反“一个定义”规则


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

< P> >“代码> >内联< /Cord>”并不意味着C++中的内联,这只意味着在不同的翻译单元中可以看到完全相同功能的多个定义,这些翻译单元被链接起来,而不违反一个定义规则


记住这一点,类定义中定义的成员函数是隐式内联的。包含该标题的所有翻译单元都可以生成相同的符号,链接器将丢弃除其中一个以外的所有符号。

inline
从此与内联没有任何关系。它有一点语义输入(它提升了一个定义规则,可能还有一些我忘记了的东西),但它既不意味着编译器内联的函数也不是必需的。