This commit is contained in:
2025-10-25 03:02:53 +03:00
commit 043225d523
3416 changed files with 681196 additions and 0 deletions

64
cppdraft/class/mfct.md Normal file
View File

@@ -0,0 +1,64 @@
[class.mfct]
# 11 Classes [[class]](./#class)
## 11.4 Class members [[class.mem]](class.mem#class.mfct)
### 11.4.2 Member functions [class.mfct]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L1059)
If a member function is attached to the global module and is defined ([[dcl.fct.def]](dcl.fct.def "9.6Function definitions")) in its class definition,
it is inline ([[dcl.inline]](dcl.inline "9.2.8The inline specifier"))[.](#1.sentence-1)
[*Note [1](#note-1)*:
A member function is also inline if it is declaredinline, constexpr, or consteval[.](#1.sentence-2)
— *end note*]
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L1069)
[*Example [1](#example-1)*: struct X {typedef int T; static T count; void f(T);};void X::f(T t = count) { }
The definition of the member function f of class X inhabits the global
scope; the notation X::f indicates that the function f is a member of class X and in the scope of class X[.](#2.sentence-1)
In
the function definition, the parameter type T refers to the
typedef member T declared in class X and the default
argument count refers to the static data member count declared in class X[.](#2.sentence-2)
— *end example*]
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L1090)
Member functions of a local class shall be defined inline in their class
definition, if they are defined at all[.](#3.sentence-1)
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L1095)
[*Note [2](#note-2)*:
A member function can be declared (but not defined) using a typedef for
a function type[.](#4.sentence-1)
The resulting member function has exactly the same type
as it would have if the function declarator were provided explicitly,
see [[dcl.fct]](dcl.fct "9.3.4.6Functions") and [[temp.arg]](temp.arg "13.4Template arguments")[.](#4.sentence-2)
[*Example [2](#example-2)*: typedef void fv();typedef void fvc() const;struct S { fv memfunc1; // equivalent to: void memfunc1();void memfunc2();
fvc memfunc3; // equivalent to: void memfunc3() const;};
fv S::* pmfv1 = &S::memfunc1;
fv S::* pmfv2 = &S::memfunc2;
fvc S::* pmfv3 = &S::memfunc3; — *end example*]
— *end note*]