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 füllt die GCC-Aggregatinitialisierung eines Arrays das Ganze zuerst mit Nullen, einschließlich Nicht-Null-Elementen?
Warum füllt gcc das gesamte Array mit Nullen anstatt nur mit den verbleibenden 96 Ganzzahlen? Die Nicht-Null-Initialisierer befinden sich alle am Anfang des Arrays. void *sink; void bar() { int a[100]{1,2,3,4}; sink = a; // a escapes the function asm("":::"memory"); // and compiler memory barrier // forces the compiler to …


1
Bietet das Laichen eines Threads selbst Garantien für die Speicherreihenfolge?
Ich möchte ungefähr Folgendes tun: Anfänglicher Thread: Schreiben Sie einige Werte in globale Variablen (sie werden nie wieder geschrieben). Dies können mäßig große Daten sein (Arrays, Strings usw.). Kann nicht einfach gemacht werden std::atomic<>. andere Threads erzeugen Andere Themen: Lesen Sie den globalen Zustand Arbeit machen, etc. Jetzt weiß ich, …

1
Warum führt {} als Funktionsargument nicht zu Mehrdeutigkeiten?
Betrachten Sie diesen Code: #include <vector> #include <iostream> enum class A { X, Y }; struct Test { Test(const std::vector<double>&, const std::vector<int>& = {}, A = A::X) { std::cout << "vector overload" << std::endl; } Test(const std::vector<double>&, int, A = A::X) { std::cout << "int overload" << std::endl; } }; …

3
Teilen Sie einen bestimmten std :: varianten-Typ nach einem bestimmten Kriterium
Wie durch einen bestimmten Variantentyp using V = std::variant<bool, char, std::string, int, float, double, std::vector<int>>; deklarieren Sie zwei Variantentypen using V1 = std::variant<bool, char, int, float, double>; using V2 = std::variant<std::string, std::vector<int>>; Woher V1gehören alle arithmetischen Typen von Vund V2alle nicht-arithmetischen Typen von V? V kann ein Parameter einer Vorlagenklasse …
20 c++  c++17  std-variant 


4
Ist es gültig, std :: transform mit std :: back_inserter zu verwenden?
Cppreference hat diesen Beispielcode für std::transform: std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); Es heißt aber auch: std::transformgarantiert nicht die ordnungsgemäße Anwendung von unary_opoder binary_op. Verwenden Sie zum Anwenden einer Funktion auf eine Sequenz in der angegebenen Reihenfolge oder zum Anwenden einer Funktion, …

2
Ist es sicher, die Platzierung neu auf "this" für triviale Objekte aufzurufen?
Ich weiß, dass diese Frage bereits mehrmals gestellt wurde, aber ich konnte keine Antwort für diesen speziellen Fall finden. Angenommen, ich habe eine triviale Klasse, die keine Ressourcen besitzt und einen leeren Destruktor und einen Standardkonstruktor hat. Es verfügt über eine Handvoll Mitgliedsvariablen mit klasseninterner Initialisierung. keiner von ihnen ist …

3
Undefiniertes Verhalten im Vektor der gegossenen Vektoren
Warum schreibt dieser Code eine undefinierte Anzahl scheinbar nicht initialisierter Ganzzahlen? #include <iostream> #include <vector> using namespace std; int main() { for (int i : vector<vector<int>>{{77, 777, 7777}}[0]) cout << i << ' '; } Ich habe erwartet, dass die Ausgabe sein wird 77 777 7777. Soll dieser Code undefiniert …
19 c++ 

2
int numeral -> Zeigerkonvertierungsregeln
Betrachten Sie den folgenden Code. void f(double p) {} void f(double* p) {} int main() { f(1-1); return 0; } MSVC 2017 kompiliert das nicht. Es stellt sich heraus, dass es sich um einen mehrdeutigen überlasteten Anruf handelt, der mit 1-1dem identisch ist 0und daher in diesen konvertiert werden kann …
19 c++  visual-c++  types 

3
c ++ Threads innerhalb der Schleife drucken falsche Werte
Ich versuche, Multithreading in c ++ zu verstehen, aber ich stecke in diesem Problem fest: Wenn ich Threads in einer for-Schleife starte, drucken sie falsche Werte. Dies ist der Code: #include <iostream> #include <list> #include <thread> void print_id(int id){ printf("Hello from thread %d\n", id); } int main() { int n=5; …




2
Warum überprüft das Konzept same_as die Typgleichheit zweimal?
Als ich mir die mögliche Implementierung des same_as-Konzepts unter https://en.cppreference.com/w/cpp/concepts/same_as ansah, bemerkte ich, dass etwas Seltsames passiert. namespace detail { template< class T, class U > concept SameHelper = std::is_same_v<T, U>; } template< class T, class U > concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U, T>; Die erste Frage ist, …
19 c++  c++20  concept 

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.