Alles im Zusammenhang mit C ++ Eine Definitionsregel (ODR), d. h. eine Regel des C ++ - Standards, die mehrere Definitionen der meisten Sprachobjekte verbietet. Das ODR schreibt grob vor, dass die meisten Sprachobjekte (Objekte, Funktionen, Vorlagen usw.) eine eindeutige (nicht duplizierte) Definition in der gleichen Übersetzungseinheit oder über das gesamte Programm haben müssen, während mehrere Deklarationen noch möglich sind.
C++03 3.2.2 ... Ein Objekt oder eine nicht überladene Funktion wird verwendet, wenn der Name in einem potenziell ausgewerteten Ausdruck erscheint. Eine virtuelle Memberfunktion wird verwendet, wenn sie nicht rein ist ...
Und dann späte...
10.11.2010, 15:15
Ich bin etwas verwirrt über die static In-Class Initialisierung eines const Members. Zum Beispiel im folgenden Code:
%Vor%
Live-Beispiel
Ich definiere nicht Foo::n (die Zeile ist kommentiert). Also, ich erwarte, dass der Aufr...
27.09.2015, 20:46
Wie im Buch Die C ++ Programmiersprache (Bjarne Stroustrup), in Abschnitt 15.2.3 (Die Eine Definitionsregel) Seite Nr. 425, schreibe ich Programm wie folgt:
file1.cpp
%Vor%
file2.cpp
%Vor%
Zum Kompilieren habe ich den folgenden Befe...
13.05.2016, 07:09
Ich weiß, dass es viele ähnliche Fragen gibt, aber irgendwie andere Fragen. Es handelt sich um folgende Situation:
%Vor%
So weit ich verstehe constexpr steht für Kompilierzeitkonstanten. So kann der Compiler bereits eine Berechnung durchf...
10.03.2016, 21:41
DR 712 war verantwortlich für die Änderung des Wortlauts von [basic.def.odr] / 2 in C ++ 11 zum heutigen Wortlaut in [basic .defodr] 2 und 3 . Aber ich versuche immer noch, den Grund für die Änderung zu verstehen, wie in der DR gesagt:
...
28.02.2017, 18:27
Dieser Code funktioniert:
%Vor%
Aber wenn ich int in float ändere, bekomme ich einen Fehler:
%Vor%
/tmp/main-272d80.o: In der Funktion main': main.cpp:(.text+0xe):
undefined reference to Blob :: a '
Warum kann ich nicht...
01.02.2015, 15:20
Also habe ich diesen Code in 2 separaten Übersetzungseinheiten:
%Vor%
Bei normalem Kompilieren ist das Ergebnis 10 . Bei der Kompilierung mit -O3 (Inlining on) bekomme ich 11 .
Ich habe eindeutig eine ODR-Verletzung für func() gema...
30.07.2015, 11:24
Wenn ich eine leere Variable nach Wert übergebe, obwohl sie keine Definition hat, ist sie sicher und konform?
Ich bin auf dieses Problem gestoßen, als ich an Code gearbeitet habe und | überladen habe, um den Inhalt des Vektors v : auszu...
02.11.2017, 11:07
Dies ist wahrscheinlich eine etwas ungewöhnliche Frage, da es eine ausführlichere Erklärung für eine kurze Antwort auf eine andere Frage und einige Aspekte des C ++ 11 Standards, die damit zusammenhängen.
Um die Bezugnahme zu erleichtern, m...
27.01.2013, 13:45
Bitte beachten Sie den folgenden Testfall (reduziert von der LLVM-Quelle):
%Vor%
und
%Vor%
Verstößt dies gegen die eine Definitionsregel?
gcc-6 denkt momentan so:
%Vor%
20.05.2015, 05:58