Ich habe kein Video über gefunden
alle Dinge ¹, aber es gibt mindestens con.3: standardmäßig bestehen Zeiger und Verweise auf const s aus den CPP -Kernrichtlinien.
alle Dinge , z. CPPCON 2017: Ben Deane & Jason Turner „Contexpr All the Dings!“ ², aber das, wie in den Kommentaren vorgeschlagen, parallel nicht wirklich einer von Const oder noExcept , da es die Schnittstelle einer Funktion nicht verändert, aber nur zusätzliche Funktionen fügt. Die Vorschläge sind häufiger darauf verzerrt, sehr vorsichtig damit zu sein: < /p>
[*]
ist schwierig, da es Teil der Funktionsoberfläche ist. Insbesondere wenn Sie eine Bibliothek schreiben, kann Ihr Client -Code von der Eigenschaft noexcept abhängen. Es kann schwierig sein, es später zu ändern, da Sie den vorhandenen Code möglicherweise brechen. < /Li>
ist Teil der Funktion der Funktion; Sie sollten es nicht hinzufügen, nur weil Ihre aktuelle Implementierung nicht wirft. Ich bin mir nicht sicher über die richtige Antwort auf diese Frage, aber ich bin ziemlich zuversichtlich, dass sich Ihre Funktion heute nichts damit verhält.
all die Dinge .
Ich habe kein EMC ++ zur Hand, aber ich erinnere mich, dass Scott Meyers zu dem Punkt betonte, dass es nicht von noexcept eine Funktion zurückgeht. Wenn ich einen Funktionsparameter als const & erkläre, treffe ich keine Entscheidung über die Schnittstelle, die ich in Zukunft nicht zurückversetzen kann, da er alle meine Clients brechen würde? Nehmen Sie den Fall einer Funktion, die in den frühen Tagen von C ++ 11 entworfen wurde, um mit Lesezugriff auf Standardbehälter zu schleifen. Ich nehme an, man hätte es so entwerfen können.
Code: Select all
void work(auto const& r) {
for (auto const& e : r) {
…
}
}
Warum sollte Zugriff auf R überhaupt haben? auto const & r schien das Richtige zu sein. Zumindest in "gewöhnlichen" Szenarii. Entscheidend ist, dass diese Ansichten möglicherweise mutieren müssen, wenn sie überholt werden, wie es bei Filter_View :
der Fall ist
Code: Select all
std::vector v;
work(v); // ok
work(v | std::views::transform(std::identity{})); // ok
work(v | std::views::filter(std::identity{})); // compile-time failure
Die letzte Zeile kompiliert nicht mit der bereitgestellten Arbeitserklärung . Zwei Zeilen, die // OK in erster Linie waren, so stellte sich heraus, dass die alte Entscheidung, Arbeiten zu deklarieren R Parameter als auto const & nicht wirklich ein Blutstrom war, so viel wie noexcept scheint nach der gemeinsamen Lore zu sein.
alle Dinge war ein "Spin-off" eines früheren
alle Dinge Titel von irgendwo; Ich erinnere mich, dass Kate Gregory Letzteres in einem Video sagen hörte; Oder vielleicht erinnere ich nur falsch, aber
ich denke definitiv, dass es ein allgemeiner Vorschlag ist. Ja, mit den ordnungsgemäßen Einschränkungen. /> (³) Ich habe meine Karriere im Jahr 2019 begonnen, also war ich noch nie ein Programmierer vor dem C ++ 17, also mache ich Annahmen über die Vergangenheit, die falsch sein könnten. < /p>