Poiché i modelli sono definiti all'interno di intestazioni e il compilatore è in grado di determinare se l'inlining di una funzione è vantaggioso, ha senso? Ho sentito che i compilatori moderni sanno meglio quando integrare una funzione e ignorano il suggerimento inline
.Ha senso usare la parola chiave inline con i modelli?
modifica: Vorrei accettare entrambe le risposte, ma questo non è possibile. Per chiudere il problema accetto la risposta phresnel, perché ha ricevuto più voti e ha formalmente ragione, ma come ho detto nei commenti considero le risposte Puppy e Componente 10 come anche quelle corrette , da un diverso punto di vista.
Il problema è nella semantica C++, che non è rigorosa in caso di parola chiave inline
e di inlining. phresnel dice "scrivi in linea se lo intendi", ma ciò che in realtà è inteso da inline
non è chiaro in quanto si è evoluto dal suo significato originale a una direttiva che "ferma i compilatori lamentarsi di violazioni ODR" come dice Puppy.
È vero per le specializzazioni esplicite: sono come semplici funzioni. Ma qui -> 'template inline T g (T) {}' inline non è richiesto e potresti aver scritto 'template T g (T) {}' –
doc
Uno potrebbe averlo scritto, vero. Ma ciò non implica la rigidità, anche se sembra così. Anche Vandevoorde e Josuttis affermano esattamente ciò in _C++ Templates: La guida completa_ –
C'è una dichiarazione un po 'più debole che i modelli possono avere più definizioni (3.2/5) -> http://stackoverflow.com/a/10211420/205955 Sono d'accordo che questo non implica che siano formalmente in linea. Tuttavia, tutto si riduce a questo in pratica. Quindi, entrambe le risposte sono corrette da diversi punti di vista. – doc