Ecco un codice di esempio:Le costanti statiche della funzione in linea sono univoche?
enum Foo // or enum class whatever
{ BAR
, STUFF
};
inline const char* to_string(const Foo& foo)
{
static const char* const NAMES[] =
{ "BAR"
, "STUFF"
};
// let's assume I have some boundary checks here, it's not the point
return NAMES[foo];
};
Questa funzione è in linea, è in un'intestazione utilizzato in diverse unità di compilazione. L'obiettivo qui è di fare in modo che il compilatore non faccia nulla se non si usa questa funzione.
Domande:
- Fa garanzia standard di C++ che nomi saranno esiste in un solo file oggetto, o è lasciato al compilatore di decidere o non garantisce che ogni file oggetto avrà è la copia?
- Se ci saranno più copie, sarà un problema di collegamento (presumo che non possa testare un numero sufficiente di compilatori per verificarlo).
- Gcc, msvc e clang ottimizzeranno questo caso rendendo il binario finale con una sola istanza di NAMES?
Una domanda per domanda, per favore. –
@LightnessRacesinOrbit: "Sì, ho sentito che ti piacciono le domande, quindi ho posto domande nella mia domanda in modo che tu possa rispondere mentre rispondi ..." – Mehrdad
Direi che queste domande sono sufficientemente connesse per essere pubblicate in una singola domanda. – leftaroundabout