Als «language-lawyer» getaggte Fragen

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

2
Inline-Bedeutung in Modulschnittstellen
Betrachten Sie die Header-Datei: class T { private: int const ID; public: explicit T(int const ID_) noexcept : ID(ID_) {} int GetID() const noexcept { return ID; } }; oder alternativ: class T { private: int const ID; public: explicit T(int const ID_) noexcept; int GetID() const noexcept; }; inline …

3
C ++ 20-Konzepte: Welche Vorlagenspezialisierung wird ausgewählt, wenn das Vorlagenargument für mehrere Konzepte geeignet ist?
Gegeben : #include <concepts> #include <iostream> template<class T> struct wrapper; template<std::signed_integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "signed_integral" << std::endl; } }; template<std::integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "integral" << std::endl; } }; int main() { wrapper<int> …

3
Verhaltensunterschied der veränderlichen Erfassung der Lambda-Funktion von einem Verweis auf eine globale Variable
Ich habe festgestellt, dass die Ergebnisse bei Compilern unterschiedlich sind, wenn ich ein Lambda verwende, um einen Verweis auf eine globale Variable mit einem veränderlichen Schlüsselwort zu erfassen und dann den Wert in der Lambda-Funktion zu ändern. #include <stdio.h> #include <functional> int n = 100; std::function<int()> f() { int &m …


3
Wird der Deleter eines shared_ptr im vom benutzerdefinierten Allokator zugewiesenen Speicher gespeichert?
Angenommen, ich habe eine shared_ptrmit einem benutzerdefinierten Allokator und einem benutzerdefinierten Löscher. Ich kann im Standard nichts finden, das darüber spricht, wo der Deleter gespeichert werden soll: Es heißt nicht, dass der benutzerdefinierte Allokator für den Speicher des Deleters verwendet wird, und es heißt nicht, dass dies nicht der Fall …



4
Implizite Konvertierung bei Rückgabe nicht zulässig
#include <optional> bool f() { std::optional<int> opt; return opt; } Kompiliert nicht: 'return': cannot convert from 'std::optional<int>' to 'bool' Beratungsreferenz Ich hätte gedacht, eine Erklärung zu finden, aber ich habe sie gelesen, da es in Ordnung sein sollte. Implizite Konvertierungen werden immer dann durchgeführt, wenn ein Ausdruck eines Typs T1 …

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; } }; …

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
Die Priorität / Priorität des Pfeiloperators (->) ist am niedrigsten oder die Priorität der Zuweisung / kombinierten Zuweisung ist am niedrigsten?
JLS : Der Operator mit der niedrigsten Priorität ist der Pfeil eines Lambda-Ausdrucks (->) , gefolgt von den Zuweisungsoperatoren. In welche Richtung verfolgt (Priorität erhöhen, Priorität verringern)? - "gefolgt" bedeutet, dass die Zuweisung eine höhere oder niedrigere Priorität hat (in Bezug auf den Pfeiloperator)? Ich denke, in zunehmendem Maße, weil …


1
Warum sucht der C ++ - Standard nach Dateien, die so suchen, wie sie es tun?
C ++ verwendet den streamoffTyp, um einen Offset innerhalb eines (Datei-) Streams darzustellen, und ist in [stream.types] wie folgt definiert: using streamoff = implementation-defined ; Der Typ Streamoff ist ein Synonym für einen der vorzeichenbehafteten integralen Grundtypen mit ausreichender Größe, um die maximal mögliche Dateigröße für das Betriebssystem darzustellen. 287) …

1
Ist Clang korrekt, um Code abzulehnen, in dem die verschachtelte Klasse einer Klassenvorlage nur über Spezialisierungen definiert ist?
Gegeben die folgende Klassenvorlage: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; Wir definieren Innerseparat für jede Spezialisierung von Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; und definieren Sie dann die Elementfunktion feinmal für alle Spezialisierungen von Outer: auto Outer<T>::f(Inner) -> void { } …

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.