Betrachten Sie diesen Code:In welcher Compilierungseinheit lebt eine constexpr-Variable?
struct foo
{
static constexpr int value = 42;
};
void bar(const int* value) { std::cout << *value; }
int main() { bar(&foo::value); }
Dieses feine und ohne Warnungen unter dem couple von online compilers kompiliert ich versuchte. Da es keine einzige .cpp
Datei gibt, die den Wert constexpr
definiert, könnte der Wert des Zeigers unterschiedlich sein, wenn die bar
-Methode von verschiedenen Kompilierungseinheiten aufgerufen wird? Oder garantiert der Standard, dass der Wert über alle Übersetzungseinheiten hinweg nur einmal vergeben wird (dh eine implizite)?
Haben Sie gerade das Programm kompiliert oder verlinkt? –
Sobald Sie die Adresse tatsächlich verwenden (http://ideone.com/Bi5oEt), müssen Sie eine Definition angeben. –
Dieser Code verstößt gegen die Definition für eine Definition. Da dies jedoch ein nicht definiertes Verhalten ist, müssen Compiler keine Warnungen ausgeben. – cpplearner