Als «c++» getaggte Fragen

C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entwickelt und hat eine ähnliche Syntax, ist aber jetzt eine völlig andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. Verwenden Sie ein versionierungsspezifisches Tag für Fragen zu einer bestimmten Standardversion [C ++ 11], [C ++ 14], [C ++ 17] oder [C ++ 20] usw.

1
Warum ist die Optimierung der leeren Basis verboten, wenn die leere Basisklasse auch eine Mitgliedsvariable ist?
Die Optimierung der leeren Basis ist großartig. Es gibt jedoch die folgende Einschränkung: Eine leere Basisoptimierung ist verboten, wenn eine der leeren Basisklassen auch der Typ oder die Basis des Typs des ersten nicht statischen Datenelements ist, da die beiden Basisunterobjekte desselben Typs unterschiedliche Adressen innerhalb der Objektdarstellung haben müssen …


2
Wie funktioniert das Werfen und Fangen von Ints?
Mit diesem Code: int main() { try { throw -1; } catch (int& x) { std::cerr << "We caught an int exception with value: " << x << std::endl; } std::cout << "Continuing on our merry way." << std::endl; return 0; } Wir haben: /tmp$ ./prorgam.out Continuing on our merry …

1
Ist das ein Fehler in std :: gcd?
Ich bin auf dieses Verhalten gestoßen std::gcd, das ich unerwartet fand: #include <iostream> #include <numeric> int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type<decltype(a), decltype(b)>::type; C ca = std::abs(a); C cb = b; std::cout << …

1
if constexpr - warum wird die verworfene Anweisung vollständig überprüft?
Ich habe mit C ++ 20 Consteval in GCC 10 herumgespielt und diesen Code geschrieben #include <optional> #include <tuple> #include <iostream> template <std::size_t N, typename Predicate, typename Tuple> consteval std::optional<std::size_t> find_if_impl(Predicate&& pred, Tuple&& t) noexcept { constexpr std::size_t I = std::tuple_size_v<std::decay_t<decltype(t)>> - N; if constexpr (N == 0u) { return …


2
Warum können wir mit malloc keine trivial konstruierbaren Objekte erstellen, wenn der triviale Standardkonstruktor keine Aktion ausführt?
Ich habe Schwierigkeiten, den folgenden Absatz zu verstehen, der aus der Referenz über den trivialen Standardkonstruktor zitiert wird . Ich habe nach Stackoverflow gesucht, aber immer noch keine klare Antwort erhalten. Also bitte helfen. Ein trivialer Standardkonstruktor ist ein Konstruktor, der keine Aktion ausführt. Alle mit der C-Sprache kompatiblen Datentypen …

2
Sind Konstrukteure zum Kopieren und Verschieben automatische Freunde?
Wir können auf private Variablen einer anderen Klasse zugreifen, wenn wir Kopier- oder Verschiebungskonstruktoren definieren. Schafft C ++ sie friendautomatisch miteinander? Zum Beispiel: my_str::my_str(my_str&& m) { size_ = m.size_; //accessing private variable another my_str class buff_ = m.buff_; //accessing private variable another my_str class m.buff_ = nullptr; m.size_ = 0; …
14 c++  friend-class 

3
Warum ist die Dimension eines Arrays Teil seines Typs?
Beim Lesen des C ++ Primer-Buches stieß ich auf die folgende Aussage: "Die Anzahl der Elemente in einem Array ist Teil des Array-Typs." Also wollte ich das mit folgendem Code herausfinden: #include<iostream> int main() { char Array1[]{'H', 'e', 'l', 'p'}; char Array2[]{'P', 'l', 'e', 'a', 's', 'e'}; std::cout<<typeid(Array1).name()<<std::endl; //prints A4_c …
14 c++  arrays  c++11 


3
Ist ein vollständig qualifizierter Klassenname bis zum globalen Geltungsbereich jemals für Definitionen von Out-of-Line-Mitgliedsfunktionen erforderlich?
Bei dieser Frage habe ich mich gefragt, ob es jemals nützlich / notwendig ist, Klassennamen (einschließlich des globalen Bereichsoperators) in einer nicht funktionsfähigen Elementfunktionsdefinition vollständig zu qualifizieren. Einerseits habe ich das noch nie zuvor gesehen (und die Syntax dafür scheint dunkel zu sein). Auf der anderen Seite ist die Suche …


2
Ist es GCC9 erlaubt, den wertlosen Zustand der std :: -Variante zu vermeiden?
Ich habe kürzlich eine Reddit-Diskussion verfolgt, die zu einem schönen Vergleich der std::visitOptimierung zwischen Compilern führte. Mir ist Folgendes aufgefallen: https://godbolt.org/z/D2Q5ED Sowohl GCC9 als auch Clang9 (ich denke, sie haben dieselbe stdlib) generieren keinen Code zum Überprüfen und Auslösen einer wertlosen Ausnahme, wenn alle Typen bestimmte Bedingungen erfüllen. Dies führt …

1
Warum funktioniert std :: swap nicht mit Vektorelementen <bool> unter Clang / Win?
Ich habe folgenden Code: #include &lt;vector&gt; #include &lt;utility&gt; int main() { std::vector&lt;bool&gt; vb{true, false}; std::swap(vb[0], vb[1]); } Argumente über die Vernunft vector&lt;bool&gt;beiseite, das funktionierte gut bei: Clang für Mac Visual Studio für Windows GCC für Linux Dann habe ich versucht, es mit Clang unter Windows zu erstellen und habe den …

1
Kann der Konstruktor std :: vector range explizite Konvertierungen aufrufen?
Ist das folgende Programm gut formuliert? #include &lt;vector&gt; struct A { explicit A(int) {} }; int main() { std::vector&lt;int&gt; vi = {1, 2, 3, 4, 5}; std::vector&lt;A&gt; va(vi.begin(), vi.end()); } Gemäß C ++ 17 [sequence.reqmts] ist die Anforderung für X u(i, j); Wo Xist ein Sequenzcontainer, ist: Tsoll EmplaceConstructiblein Xvon …
14 c++  c++17 

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.