Oto przykładowy kod:Czy stałe statyczne funkcji inline są unikalne?
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];
};
Ta funkcja jest inline, to w nagłówku wykorzystywane w kilku jednostkach kompilacji. Celem jest sprawienie, aby kompilator nic nie robił, jeśli ta funkcja nie będzie używana.
Pytania:
- Czy C++ standardowej gwarancji, że nazwy będą istnieje tylko w jednym pliku wynikowego, czy jest to w lewo, aby kompilator zdecydować, czy też gwarancji, że każdy plik obiekt będzie mieć to kopia?
- Jeśli będzie wiele kopii, czy będzie to problem z łączeniem (zakładam, że nie mogę przetestować wystarczającej liczby kompilatorów, aby to sprawdzić).
- Czy gcc, msvc i clang zoptymalizują ten przypadek, sprawiając, że ostateczny plik binarny ma tylko jedno wystąpienie NAMES?
Jedno pytanie na pytanie, proszę. –
@LightnessRacesinOrbit: "Yo dawg, słyszałem, że lubisz pytania, więc stawiam pytania w moim pytaniu, abyś mógł odpowiedzieć, podczas gdy ty odpowiesz ..." – Mehrdad
Powiedziałbym, że te pytania są wystarczająco połączone, aby zostać zaksięgowane w jednym pytaniu. – leftaroundabout