2017-07-02 1 views
0

Ich lese über die inline specifier und ich wirklich nicht bekommen diesen Teil:Inline-Funktionen und Variablen haben die gleiche Adresse?

3) eine Inline-Funktion oder Variable (da C++ 17) mit externer Bindung (zB nicht statisch deklariert) Folgendes zusätzliche Eigenschaften: 1) Es muss in jeder Übersetzungseinheit inline deklariert werden. 2) Es hat die gleiche Adresse in jeder Übersetzungseinheit.

Was bedeutet es, dass Funktionen die gleiche Adresse haben, wusste ich nicht einmal, dass Funktionen eine Speicheradresse hatten? Und heißt das auch, dass Inline-Variablen alle die gleichen Adressen haben, als wäre es eine Variable? Wenn ja, warum verwenden Sie sogar Inline-Variablen?

Antwort

2

Was bedeutet es, dass Funktionen die gleiche Adresse haben?

Genau das, was es sagt. Jede Inline-Funktion in jeder Übersetzungseinheit hat die gleiche Adresse, d. H. Sie ist nur eine Funktion. Warum das wichtig ist, werden Sie sehen.

Und bedeutet dies auch, dass Inline-Variablen alle die gleichen Adressen haben, als wäre es eine Variable?

Genau.

Wenn ja, warum inline on Variablen verwenden?

Es ist wie fragen, warum inline Funktionen verwenden. Sie verwenden Inline-Funktionen für Funktionen, die in Header-Dateien definiert sind, da sie in mehreren Übersetzungseinheiten mehrfach enthalten sein müssen. Wenn sie nicht inline sind, wird der Linker mehrere Definitionen derselben exakten Funktion sehen und sich über doppelte Symbole beschweren. Es weiß nicht, dass die Funktionen tatsächlich die exakt gleiche Funktion sind.

inline kommt hier rein. Indem Sie eine Funktion inline markieren, sagen Sie dem Compiler, dass es immer die gleiche Funktion ist, sogar über mehrere Übersetzungseinheiten hinweg. Das Gleiche gilt für Variablen, die in Header-Dateien definiert sind. Auch sie sind in mehreren Übersetzungseinheiten enthalten, und der Linker weiß nicht, dass sie sich auf dieselbe exakte Variable beziehen sollen. inline behebt dies noch einmal.

Verwandte Themen