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
Ist diese C ++ AtomicInt-Implementierung korrekt?
Voraussetzung: Ich arbeite mit einer in ARM eingebetteten (fast Bare-Metal-) Umgebung, in der nicht einmal C ++ 11 (mit std::atomic<int>) verfügbar ist. Vermeiden Sie daher Antworten wie " Verwendenstd::atomic<int> Sie einfach Standard-C ++ ": Ich kann nicht . Ist diese ARM- Implementierung von AtomicInt korrekt? (Angenommen, die ARM-Architektur ist ARMv7-A …


3
C ++ Lambda-Codegenerierung mit Init Captures in C ++ 14
Ich versuche, den Codecode zu verstehen / zu klären, der generiert wird, wenn Captures an Lambdas übergeben werden, insbesondere in generalisierten Init-Captures, die in C ++ 14 hinzugefügt wurden. Geben Sie die folgenden unten aufgeführten Codebeispiele an. Dies ist mein aktuelles Verständnis dessen, was der Compiler generieren wird. Fall 1: …
9 c++  lambda  c++14  move 


1
Vom Benutzer bereitgestellte std :: allocator-Spezialisierung
Klassenvorlagen im ::stdNamespace können im Allgemeinen durch Programme für benutzerdefinierte Typen spezialisiert werden. Ich habe keine Ausnahme von dieser Regel für gefunden std::allocator. Darf ich mich also auf std::allocatormeine eigenen Typen spezialisieren? Und wenn ich darf, muss ich dann alle Mitglieder der std::allocatorprimären Vorlage bereitstellen , da viele von ihnen …
8 c++  c++17  allocator 

2
Hat std :: deque zu Beginn tatsächlich eine konstante Zeiteinfügung?
Der Standard sagt: Eine Deque ist ein Sequenzcontainer, der Iteratoren mit wahlfreiem Zugriff unterstützt (27.2.7). Darüber hinaus werden Einfüge- und Löschvorgänge mit konstanter Zeit am Anfang oder am Ende unterstützt. Einfügen und Löschen in der Mitte dauert linear. In derselben Klausel heißt es jedoch auch: Alle Komplexitätsanforderungen in dieser Klausel …


1
Eliminierung der if / else-Verzweigung in C ++ zur Kompilierungszeit
Im folgenden Codebeispiel ifhängt die Anweisung vom boolVorlagenparameter ab, bei dem es sich um eine Konstante zur Kompilierungszeit handelt. Compiler behandeln diesen Code unterschiedlich: MSVC schlägt mit einem Verbindungsfehler fehl (was ich erwartet habe), da die Vorlagenfunktion in der elseVerzweigung nicht auf den trueWert der Vorlagenparameter spezialisiert ist (obwohl sie …

1
Warum gibt es sowohl in <algorithm> als auch in <utility> eine std :: move
Meistens wird std::movehier auf die &lt;utility&gt;Version verwiesen . Das std::movein macht&lt;algorithm&gt; tatsächlich das, was sein Name andeutet, move , während das std::movein&lt;utility&gt; sein Argument auf einen x-Wert umwandelt, was im Grunde nur ein Vorverarbeitungsschritt ist, um den x-Wert schließlich in einen l-Wert zu verschieben. Ist es also nicht verwirrend, movewenn …

1
Spezialisierung basierend auf der Gültigkeit der Arraygröße
Der Versuch, sich auf die Gültigkeit der Arraygröße zu spezialisieren: // base template template&lt;int p, typename T = void&gt; struct absolute { operator int () const { return 0; } }; // positive case template template&lt;int p&gt; struct absolute&lt;p, typename std::void_t&lt;int[p]&gt;&gt; { operator int () const { return p; } …


1
Wie man die vorgeschlagene Auflösung von # 1664 versteht
Nachdem ich mir die vorgeschlagene Auflösung von # 1664 ( vorgeschlagene Auflösung 1664 ) angesehen habe, bin ich verwirrt über die Regeln eines Standardarguments einer Funktionsvorlage. Zitieren Sie den Inhalt hier: Gemäß 8.1.5 [expr.prim.lambda] Absatz 3 Der Schließungstyp wird im kleinsten Blockbereich, Klassenbereich oder Namespace-Bereich deklariert, der den entsprechenden Lambda-Ausdruck …


1
acosl ist nicht im std namespace?
Laut cppreference acoslsollte sich die Funktion im Standard- Namespace befinden: https://en.cppreference.com/w/cpp/numeric/math/acos Mit gcc (oder clang) wird der folgende Code jedoch nicht kompiliert: #include &lt;cmath&gt; int main() { long double var = std::acosl(4.0); return 0; } Ich erhalte die folgende Fehlermeldung: gay@latitude-7490:~$ g++ -std=c++11 test.cpp test.cpp: In function 'int main()': test.cpp:5:26: …
8 c++  c++11 

1
Schlechter Typabzug beim Übergeben eines überladenen Funktionszeigers und seiner Argumente
Ich versuche, einen Wrapper bereitzustellen, um std::invokeden Funktionstyp auch dann abzuleiten, wenn die Funktion überlastet ist. (Ich habe gestern eine verwandte Frage für die Variadic- und Methodenzeigerversion gestellt). Wenn die Funktion ein Argument hat, funktioniert dieser Code (C ++ 17) unter normalen Überlastbedingungen wie erwartet: #include &lt;functional&gt; template &lt;typename ReturnType, …

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.