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 `decltype (static_cast <T> (…))` nicht immer` T`?
Für den folgenden Code werden alle bis auf die letzte Zusicherung bestanden: template&lt;typename T&gt; constexpr void assert_static_cast_identity() { using T_cast = decltype(static_cast&lt;T&gt;(std::declval&lt;T&gt;())); static_assert(std::is_same_v&lt;T_cast, T&gt;); } int main() { assert_static_cast_identity&lt;int&gt;(); assert_static_cast_identity&lt;int&amp;&gt;(); assert_static_cast_identity&lt;int&amp;&amp;&gt;(); // assert_static_cast_identity&lt;int(int)&gt;(); // illegal cast assert_static_cast_identity&lt;int (&amp;)(int)&gt;(); assert_static_cast_identity&lt;int (&amp;&amp;)(int)&gt;(); // static assert fails } Warum schlägt diese letzte Behauptung …
24 c++  static-cast 

3
C ++ 20-Konzepte: Welche Vorlagenspezialisierung wird ausgewählt, wenn das Vorlagenargument für mehrere Konzepte geeignet ist?
Gegeben : #include &lt;concepts&gt; #include &lt;iostream&gt; template&lt;class T&gt; struct wrapper; template&lt;std::signed_integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "signed_integral" &lt;&lt; std::endl; } }; template&lt;std::integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "integral" &lt;&lt; std::endl; } }; int main() { wrapper&lt;int&gt; …

1
Warum hängt die Klassengröße in c ++ vom öffentlichen / privaten Status der Datenelemente ab?
Soweit ich weiß, hängt die Größe einer Klasse in C ++ von den folgenden Faktoren ab: Größe aller nicht statischen Datenelemente. Reihenfolge der Datenmitglieder. Ob das Auffüllen von Bytes aktiviert ist oder nicht. Größe seiner unmittelbaren Basisklasse. Die Existenz virtueller Funktionen. Vererbungsmodus (virtuelle Vererbung). Jetzt habe ich 2 Klassen wie …

2
Warum verhält sich diese Vorlagenfunktion nicht wie erwartet?
Ich habe über Vorlagenfunktionen gelesen und war durch dieses Problem verwirrt: #include &lt;iostream&gt; void f(int) { std::cout &lt;&lt; "f(int)\n"; } template&lt;typename T&gt; void g(T val) { std::cout &lt;&lt; typeid(val).name() &lt;&lt; " "; f(val); } void f(double) { std::cout &lt;&lt; "f(double)\n"; } template void g&lt;double&gt;(double); int main() { f(1.0); // f(double) …

3
Verhaltensunterschied der veränderlichen Erfassung der Lambda-Funktion von einem Verweis auf eine globale Variable
Ich habe festgestellt, dass die Ergebnisse bei Compilern unterschiedlich sind, wenn ich ein Lambda verwende, um einen Verweis auf eine globale Variable mit einem veränderlichen Schlüsselwort zu erfassen und dann den Wert in der Lambda-Funktion zu ändern. #include &lt;stdio.h&gt; #include &lt;functional&gt; int n = 100; std::function&lt;int()&gt; f() { int &amp;m …

1
'auto' als Platzhalter für Vorlagenargumente für einen Funktionsparameter
In C ++ 20 kann der autoFunktionsparametertyp verwendet werden. Ermöglicht es auch die Verwendung autoeines Platzhalters als Vorlagenargument (nicht ähnlich, aber in gewisser Weise im Sinne der C ++ 17-Vorlage &lt;auto&gt; ) für den Funktionsparametertyp? Also der folgende Code vor C ++ 20: template&lt;typename First, typename Second&gt; void printPair(const std::pair&lt;First, …
22 c++  templates  auto  c++20 


6
Initialisieren einer Variablen unbekannten Typs über überladene Konstruktoren in C ++
Ich komme hauptsächlich aus Python und habe Probleme mit der Arbeit mit Typen in C ++. Ich versuche, eine Klassenvariable über einen von mehreren überladenen Konstruktoren zu initialisieren, die verschiedene Typen als Parameter verwenden. Ich habe gelesen, dass die Verwendung des autoSchlüsselworts für die automatische Deklaration einer Variablen verwendet werden …

3
Wird der Deleter eines shared_ptr im vom benutzerdefinierten Allokator zugewiesenen Speicher gespeichert?
Angenommen, ich habe eine shared_ptrmit einem benutzerdefinierten Allokator und einem benutzerdefinierten Löscher. Ich kann im Standard nichts finden, das darüber spricht, wo der Deleter gespeichert werden soll: Es heißt nicht, dass der benutzerdefinierte Allokator für den Speicher des Deleters verwendet wird, und es heißt nicht, dass dies nicht der Fall …



4
Implizite Konvertierung bei Rückgabe nicht zulässig
#include &lt;optional&gt; bool f() { std::optional&lt;int&gt; opt; return opt; } Kompiliert nicht: 'return': cannot convert from 'std::optional&lt;int&gt;' to 'bool' Beratungsreferenz Ich hätte gedacht, eine Erklärung zu finden, aber ich habe sie gelesen, da es in Ordnung sein sollte. Implizite Konvertierungen werden immer dann durchgeführt, wenn ein Ausdruck eines Typs T1 …

2
Welche Zufallszahlen-Engines von <random> sollte man in der Praxis tatsächlich verwenden? std :: mt19937?
Angenommen, Sie möchten C ++ - Funktionen &lt;random&gt;in einem praktischen Programm verwenden (für eine Definition von "praktisch" - die Einschränkungen hier sind Teil dieser Frage). Sie haben ungefähr folgenden Code: int main(int argc, char **argv) { int seed = get_user_provided_seed_value(argc, argv); if (seed == 0) seed = std::random_device()(); ENGINE g(seed); …
21 c++  c++11  random 

4
Wie rufe ich den richtigen Konstruktor eines Vorlagentyps auf?
Wie kann ich im folgenden Code dafür sorgen, dass die kommentierte Zeile genauso funktioniert wie die Zeile direkt darüber? Ich möchte daraus einen generischen Code machen, der einen geeigneten Konstruktor einer Vorlage aufruft Type. #include &lt;string&gt; #include &lt;iostream&gt; template &lt;typename Type&gt; struct Class { Type data; Class(Type data) : data(data) …

5
Operation in c ++ einstellen (vorhandenen Wert aktualisieren)
Hier ist mein Code: while (it!=s.end()) //here 's' is a set of stl and 'it' is iterator of set { *it=*it-sub; //'sub' is an int value it++; } Ich kann den Wert von set by iterator nicht aktualisieren. Ich möchte einen ganzzahligen Wert 'sub' von allen Elementen der Menge subtrahieren. …
21 c++ 

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.