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.

3
std :: vector (ab) verwendet die automatische Speicherung
Betrachten Sie das folgende Snippet: #include <array> int main() { using huge_type = std::array<char, 20*1024*1024>; huge_type t; } Offensichtlich würde es auf den meisten Plattformen abstürzen, da die Standardstapelgröße normalerweise weniger als 20 MB beträgt. Betrachten Sie nun den folgenden Code: #include <array> #include <vector> int main() { using huge_type …

3
Wie kann ich die Tiefe eines mehrdimensionalen std :: vector zur Kompilierungszeit ermitteln?
Ich habe eine Funktion, die mehrdimensional ist std::vectorund erfordert, dass die Tiefe (oder die Anzahl der Dimensionen) als Vorlagenparameter übergeben wird. Anstatt diesen Wert fest zu codieren, möchte ich eine constexprFunktion schreiben , die die std::vectorund die Tiefe als unsigned integerWert zurückgibt . Zum Beispiel: std::vector<std::vector<std::vector<int>>> v = { { …

2
Warum wird operator! = In C ++ 20 für viele Standardbibliothekstypen entfernt?
Nach cppreference , std::type_info::operator!=wird mit C ++ entfernt 20 jedoch std::type_info::operator==bleibt offenbar. Was ist der Grund dafür? Ich könnte zustimmen, dass ein Vergleich auf Ungleichheit bedeutungslos ist, aber ein Vergleich auf Gleichheit wäre genauso bedeutungslos, nicht wahr? In ähnlicher Weise werden operator!=von vielen anderen Standardbibliothekstypen, einschließlich Containern wie std::unordered_map::operator!=und std::unordered_set::operator!=in …

5
Ist es möglich, das Auslassen aggregierter Initialisierungsmitglieder zu verhindern?
Ich habe eine Struktur mit vielen Mitgliedern des gleichen Typs, wie diese struct VariablePointers { VariablePtr active; VariablePtr wasactive; VariablePtr filename; }; Das Problem ist, dass, wenn ich vergesse, eines der Strukturelemente (z. B. wasactive) wie folgt zu initialisieren : VariablePointers{activePtr, filename} Der Compiler wird sich nicht darüber beschweren, aber …


7
Idiomatische Methode zur Unterscheidung von zwei Null-Arg-Konstruktoren
Ich habe eine Klasse wie diese: struct event_counts { uint64_t counts[MAX_COUNTERS]; event_counts() : counts{} {} // more stuff }; Normalerweise möchte ich das countsArray standardmäßig (Null) wie gezeigt initialisieren . An ausgewählten Stellen, die durch Profilerstellung identifiziert wurden, möchte ich jedoch die Array-Initialisierung unterdrücken, da ich weiß, dass das Array …

2
Ansätze zur Funktion von SFINAE in C ++
Ich verwende die Funktion SFINAE stark in einem Projekt und bin mir nicht sicher, ob es Unterschiede zwischen den folgenden beiden Ansätzen gibt (außer Stil): #include <cstdlib> #include <type_traits> #include <iostream> template <class T, class = std::enable_if_t<std::is_same_v<T, int>>> void foo() { std::cout << "method 1" << std::endl; } template <class …
40 c++  sfinae 


4
Vorlagen-Meta-Programmierung
Kann mir jemand erklären, warum die erste Meta-Programmiermethode für Vorlagen in eine Endlosschleife geht, die zweite jedoch korrekt ausgeführt wird. #include <iostream> using namespace std; template<int N, int M> struct commondivs { static const int val = (N<M) ? commondivs<N,(M-N)>::val : commondivs<(N-M),M>::val; }; template<int N> struct commondivs<N,N> { static const …

2
Warum funktioniert remove_reference nicht für Funktionen?
Ich bin neulich auf etwas Seltsames gestoßen, als ich eine Vorlagen-Metaprogrammierung durchgeführt habe. Es kommt im Grunde darauf an, dass diese Behauptung nicht (wie ich erwarten würde) vorübergeht. static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>); Zuerst dachte ich, ich hätte einen syntaktischen Fehler beim Definieren einer Funktionsreferenz gemacht, aber diese Behauptung ist erfolgreich und zeigt, …
38 c++  templates  types  c++17 



4
Überladen einer Funktion mit Vorlagen
Ich versuche, eine Funktion mithilfe von Vorlagen zu definieren, und möchte, dass der Typname entweder int oder anEnum ist (eine bestimmte Aufzählung, die ich definiert habe). Ich habe Folgendes versucht, bin aber gescheitert: template <int | anEnum T> // or <int T, anEnum T> or <int, anEnum T> bool isFunction(const …


2
Ist es legal, einen Zeiger neu auf die Funktion zuzuweisen?
Zeiger auf Funktionen sind keine einfachen Datenzeiger, da sie nicht in einem void * -Zeiger gespeichert werden können. Es scheint jedoch, dass ich die Kopie eines Funktionszeigers im dynamischen Speicher (in gcc und clang) wie im folgenden Code speichern kann. Ist ein solcher Code gemäß C ++ Standard legal oder …
33 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.