Als «language-lawyer» getaggte Fragen

Bei Fragen zu den Feinheiten formaler oder maßgeblicher Spezifikationen von Programmiersprachen und -umgebungen.

1
Kann sich sizeof (enum) von sizeof (std :: zugrunde liegender_Typ <Enum> :: type) unterscheiden?
Kürzlich kam in einer Codeüberprüfung, die im folgenden Beispiel: enum class A : uint8_t { VAL1, VAL2 }; ... std::vector&lt;A&gt; vOfA; // Assume this is sized and full of some stuff. std::memcpy(wire_buffer, vOfA.data(), vOfA.size() * sizeof(A)); Wir sollten sizeof(std::underlying_type&lt;A&gt;::type)anstelle von verwenden sizeof(A). Ist es möglich, dass sich diese jemals unterscheiden …


1
Wie finden C ++ - Compiler eine externe Variable?
Ich kompiliere dieses Programm mit g ++ und clang ++. Es gibt einen Unterschied: g ++ druckt 1, aber clang ++ druckt 2. Es scheint, dass g ++: die externe Variable im kürzesten Bereich definiert ist. clang ++: Die externe Variable wird im kürzesten globalen Bereich definiert. Hat die C …

2
Warum hat `std :: basic_ios` einen öffentlichen Konstruktor?
std::basic_ioshat einen öffentlichen Konstruktor : explicit basic_ios (std::basic_streambuf&lt;CharT,Traits&gt;* sb); IMO, der einzige Grund für eine Klasse, einen öffentlichen Konstruktor zu haben, ist die Verwendung einer eigenständigen Instanz dieser Klasse in einem Programm. Wenn eine Klasse nur existiert, um andere Klassen davon abzuleiten (wie es der Fall zu sein scheint basic_ios), …


1
Warum ist die Optimierung der leeren Basis verboten, wenn die leere Basisklasse auch eine Mitgliedsvariable ist?
Die Optimierung der leeren Basis ist großartig. Es gibt jedoch die folgende Einschränkung: Eine leere Basisoptimierung ist verboten, wenn eine der leeren Basisklassen auch der Typ oder die Basis des Typs des ersten nicht statischen Datenelements ist, da die beiden Basisunterobjekte desselben Typs unterschiedliche Adressen innerhalb der Objektdarstellung haben müssen …


1
Ist das ein Fehler in std :: gcd?
Ich bin auf dieses Verhalten gestoßen std::gcd, das ich unerwartet fand: #include &lt;iostream&gt; #include &lt;numeric&gt; int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type&lt;decltype(a), decltype(b)&gt;::type; C ca = std::abs(a); C cb = b; std::cout &lt;&lt; …

2
Warum können wir mit malloc keine trivial konstruierbaren Objekte erstellen, wenn der triviale Standardkonstruktor keine Aktion ausführt?
Ich habe Schwierigkeiten, den folgenden Absatz zu verstehen, der aus der Referenz über den trivialen Standardkonstruktor zitiert wird . Ich habe nach Stackoverflow gesucht, aber immer noch keine klare Antwort erhalten. Also bitte helfen. Ein trivialer Standardkonstruktor ist ein Konstruktor, der keine Aktion ausführt. Alle mit der C-Sprache kompatiblen Datentypen …


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
Welche Regeln gibt es für eine Funktion a -> (), die in Haskell ausgewertet wird?
Wie der Titel schon sagt: Welche Garantien gibt es für die Bewertung einer Haskell-Funktionsrückgabeeinheit? Man könnte meinen, dass in einem solchen Fall keine Auswertung erforderlich ist. Der Compiler könnte alle derartigen Aufrufe durch einen unmittelbaren ()Wert ersetzen, es sei denn, es liegen explizite Anforderungen an die Strenge vor. In diesem …

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.