[EDIT]
Cette discutions viens d'un déplacement de ce thread
http://www.developpez.net/forums/sho...d.php?t=506343
Bon, je vois ce qui se passe (enfin je crois) : tu interprètes cette phrase comme disant le contraire de ce qu'elle dit : les fonctions inline ne sont pas statiques (à moins d'être déclarées static, bien sûr), elles ont une liaison externe, ce qui veut dire que chaque UT qui définit une fonction inline définit la même fonction.
On doit d'ailleurs pouvoir le vérifier (non testé) :
La sortie devrait être (il me semble) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 header.hpp : #include <iostream> #include <ostream> inline int& extern_inline () { static int si; return si; } static inline int& static_inline () { static int si; return si; } static void print () { std::cout << "static_inline : " << static_inline() << "\n"; std::cout << "extern_inline : " << extern_inline() << "\n"; } static void inc () { static_inline()++; extern_inline()++; } void a (); a.cpp : #include "header.hpp" void a () { std::cout << "a :\n"; print (); inc (); inc (); print (); } main.cpp : #include "header.hpp" int main () { std::cout << "main :\n"; print (); inc(); print (); a (); std::cout << "main :\n"; print (); }
EDIT : Avec #include c'est mieux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 main : static_inline 0 extern_inline 0 static_inline 1 extern_inline 1 a : static_inline 0 extern_inline 1 static_inline 2 extern_inline 3 main : static_inline 1 extern_inline 3
Partager