one-definition-rule

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.
5
Antworten

Wird eine virtuelle Memberfunktion verwendet, wenn sie nicht rein ist?

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
4
Antworten

In der Klasse statisch const ODR

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
1
Antwort

struct mit demselben Namen aber unterschiedlichem Member in C ++

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
2
Antworten

Weisen Sie der Laufzeitvariablen das statische Member consExpr class zu

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
2
Antworten

Ich kann DR 712 einfach nicht verstehen

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
2
Antworten

undefinierter Verweis beim Zugriff auf das statische consExpr Float-Element

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
2
Antworten

Gibt es eine Möglichkeit, Inline-Funktion ODR-Verletzungen zu erkennen?

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
1
Antwort

Sicher, leere Variablen nach Wert zu übergeben, wenn sie keine Definition haben?

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
2
Antworten

Was darf ich mit einem statischen, in der Klasse initialisierten consExpr-Datenelement tun?

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
2
Antworten

std :: make_unique, anonymer Namespace und ODR

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