在类的定义中定义成员函数
Defining member functions inside the class' definition
我一直想知道为什么我读过的大多数代码和教程总是在类内部声明成员函数,然后像这样在外部定义它。
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
函数允许跨翻译单元的多个定义,并不一定意味着调用实际上是内联的(即像宏一样展开)。
如果你在没有inline
或static
的头文件中定义一个自由函数,并且在多个翻译单元中包含该头文件,你将打破一个定义规则。
成员函数是类似的,除非标记为内联(它们隐式地位于类定义中)。
关键字inline
在c++中并不意味着内联,它只意味着在不同的翻译单元中可以看到完全相同函数的多个定义,这些定义被链接起来,而不会违反单一定义规则。
相关文章:
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- C++令牌定义成员
- 在没有类定义的标头中定义成员变量
- 如何在类的构造函数中定义成员向量的大小
- 如何在C++中动态定义成员函数
- C++ Boost.Serialization - 用户定义成员的非侵入式序列化
- C++类 - 使用公共变量并在类外定义成员函数
- G++ - 对已定义成员函数的未定义引用
- 在哪里以及如何定义成员变量?在头文件还是实现文件中?
- 是否可以修改STL并自定义成员函数
- 从 boost::mpl:vector 类型列表中定义成员变量
- 在构造对象时定义成员函数
- 为什么定义成员函数指针变量需要类名
- 复制构造函数中的 C++ 用户定义成员
- 如何根据类参数定义成员类运算符
- 使用指向未定义成员函数的指针时的未定义引用
- 如何在运行时定义成员数组大小
- C++-在模板类之外但在头中定义成员函数
- c++在不知道对象类型的情况下定义成员函数指针
- 在特定偏移量中定义成员的结构