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
Überladen Sie eine Lambda-Funktion
Wie kann man eine einfache lokale Lambda-Funktion überladen? SSE des ursprünglichen Problems: #include <iostream> #include <map> void read() { static std::string line; std::getline(std::cin, line); auto translate = [](int idx) { constexpr static int table[8]{ 7,6,5,4,3,2,1,0 }; return table[idx]; }; auto translate = [](char c) { std::map<char, int> table{ {'a', 0}, …


3
std :: bit_cast mit std :: array
In seinem kürzlich gehaltenen Vortrag "Type punning in modernem C ++" sagte Timur Doumler , dass std::bit_castdies nicht zum Bit-Casting floatin ein verwendet werden kann, unsigned char[4]da Arrays im C-Stil nicht von einer Funktion zurückgegeben werden können. Wir sollten entweder std::memcpyC ++ 23 (oder später) verwenden oder warten, bis etwas …

1
Wie funktioniert die Implementierung von c ++ nullptr?
Ich bin gespannt, wie nullptrdas geht. Die Standards N4659 und N4849 sagen: es muss Typ haben std::nullptr_t; Sie können seine Adresse nicht nehmen; Es kann direkt in einen Zeiger und einen Zeiger auf ein Mitglied konvertiert werden. sizeof(std::nullptr_t) == sizeof(void*);; seine Umwandlung in boolist false; sein Wert kann identisch (void*)0, …

3
Initialisierung der Kopierliste? Warum wird dies kompiliert?
Ich verwende Microsoft Visual Studio Community 2019, V16.5.2. Ich möchte die Listeninitialisierung testen Bitte beachten Sie das folgende Testprogramm: #include <string> void foo(std::string str) {} int main() { foo( {"str1", "str2"} ); return 0; } Dies wird ohne Fehler und Warnung kompiliert. Warum? Es gibt einen Laufzeitfehler: Expression: Transposed pointer …
13 c++ 

1
std :: is_constructible gibt einen inkonsistenten Wert für den privaten Konstruktor zurück
Nach welchen Regeln werden std::is_constructibleprivate Konstruktoren behandelt? Gegeben den folgenden Code: #include <iostream> class Class { private: Class() { } }; template <typename T> class Test { public: static void test() { std::cout //<< std::is_constructible<Class>::value << std::is_constructible<T>::value << std::endl; } }; int main() { Test<Class>::test(); } Dieser Druck 0( ideone …
13 c++  typetraits 

1
C ++ - Compilerproblem mit struct in der Vorlagenklasse
Der folgende Code wird nicht mit gcc oder clang kompiliert. template<class T> class foo{}; template<class T> class template_class_with_struct { void my_method() { if(this->b.foo < 1); }; struct bar { long foo; } b; }; Fehlermeldung ist error: type/value mismatch at argument 1 in template parameter list for 'template<class T> class …

3
Führen Sie die Funktion innerhalb der Funktionsvorlage nur für die Typen aus, für die die Funktion definiert ist
Ich habe eine Funktionsvorlage, die viele verschiedene Typen als Eingabe verwendet. Von diesen Typen hat nur einer eine getInt()Funktion. Daher möchte ich, dass der Code die Funktion nur für diesen Typ ausführt. Bitte schlagen Sie eine Lösung vor. Vielen Dank #include <type_traits> #include <typeinfo> class X { public: int getInt(){ …

6
Wie vergleiche ich generische Strukturen in C ++?
Ich möchte Strukturen generisch vergleichen und habe so etwas getan (ich kann die tatsächliche Quelle nicht teilen, bitte fragen Sie bei Bedarf nach weiteren Details): template<typename Data> bool structCmp(Data data1, Data data2) { void* dataStart1 = (std::uint8_t*)&data1; void* dataStart2 = (std::uint8_t*)&data2; return memcmp(dataStart1, dataStart2, sizeof(Data)) == 0; } Dies funktioniert …

2
Wie kann ein const expr so schnell ausgewertet werden?
Ich habe const-Ausdrücke ausprobiert, die zur Kompilierungszeit ausgewertet werden. Aber ich habe mit einem Beispiel gespielt, das unglaublich schnell erscheint, wenn es zur Kompilierungszeit ausgeführt wird. #include<iostream> constexpr long int fib(int n) { return (n <= 1)? n : fib(n-1) + fib(n-2); } int main () { long int res …
13 c++  const  constexpr 


4
Ist die Erklärung der entspannten Reihenfolge in der Referenz falsch?
In der Dokumentation von std::memory_ordercppreference.com finden Sie ein Beispiel für eine entspannte Bestellung: Entspannte Bestellung Mit Tags versehene atomare Operationen memory_order_relaxedsind keine Synchronisationsoperationen. Sie legen keine Reihenfolge bei gleichzeitigen Speicherzugriffen fest. Sie garantieren nur die Konsistenz der Atomizität und der Änderungsreihenfolge. Zum Beispiel, wenn x und y anfänglich Null sind, …



1
Möglicher Compilerfehler in MSVC
Der folgende Code wird mit gcc und clang (und vielen anderen C ++ 11-Compilern) kompiliert. #include <stdint.h> typedef int datatype; template <typename T> struct to_datatype {}; template <> struct to_datatype<int16_t> { static constexpr datatype value = 1; }; template <typename T> class data { public: data(datatype dt = to_datatype<T>::value) {} …
13 c++  c++11  visual-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.