Frage zu C++-Konstante

#7459121
Lesenswert?
• ▲
▼

Die kurze Antwort lautet: ist halt so.

Oder wie cppreference schreibt: "If P is an rvalue reference to a cv-unqualified template parameter (so-called forwarding reference), and the corresponding function call argument is an lvalue, the type lvalue reference to A is used in place of A for deduction".

Mit f(42) bekämst du einen int (da rvalue).

Oliver

OP #7459141
Lesenswert?
• ▲
▼

Danke für die Antworten, aber finde den Satz immer noch komisch.

"i is const int&, so we should deduce T such that T&& is const int&".

Wenn sich der Satzanfang auf T bezieht, ergibt das folgende "so we should deduce T" ja keinen Sinn.

@Stefan

Wer hat diesen Kommentar geschrieben?

Das Ganze ist aus CppCon 2016: Arthur O'Dwyer “Template Normal Programming (part 1 of 2)”

https://youtu.be/vwrXHznaYLA?t=2508

Wie gesagt, das war nur ein Ausschnitt, weil ich nicht gar nicht auf die Typdeduktion etc. eingehen wollte, sondern schon über den Anfang gestolpert bin.

#7459154
Lesenswert?
• ▲
▼

Sabi schrieb:

https://youtu.be/vwrXHznaYLA?t=2508

Da sieht das aber etwas anders aus. Der Kommentar steht in der Zeile des Funktionsaufrufs und bezieht sich offenbar auch darauf. Gemeint war wohl eigentlich, dass i als const int& an die Funktion übergeben wird. Daraus leitet sich ab, dass T&& zu einem const int& werden muss, was nach den in dem Video gezeigten Regeln möglich ist. Ich denke, darauf wollte er hinaus, auch wenn die Formulierung etwas ungeschickt ist.

OP #7459168
Lesenswert?
• ▲
▼

Rolf M. schrieb:

Gemeint war wohl eigentlich, dass i als const int& an die Funktion übergeben wird. Daraus leitet sich ab, dass T&& zu einem const int& werden muss, was nach den in dem Video gezeigten Regeln möglich ist. Ich denke, darauf wollte er hinaus, auch wenn die Formulierung etwas ungeschickt ist.

Das ergibt Sinn. Danke! Dann ist einerseits die Formulierung, dass i vom Typ const int& ist, so nicht korrekt - Funktionsaufruf hin oder her -, andererseits war eben Herr Flitzpiep am Werk ...

["weil ich nicht gar nicht" sollte natürlich heißen "weil ich gar nicht".]

#7459368
Lesenswert?
• ▲
▼

Oliver S. schrieb:

Rolf M. schrieb:

Gemeint war wohl eigentlich, dass i als const int& an die Funktion übergeben wird.

Der Funktionsparamter i ist ein lvalue vom type const int.

i ist kein Funktionsparameter, sondern eine lokale Variable. Und die wird als Argument an den Parameter t vom Typ const int& übergeben.

Kein int&, und auch nix anders. Daraus wird der type des Templatparameters als int& "deduced".

const int&

Dabei wird das const ignoriert, aber das wars dann auch schon.

Warum sollte das const ignoriert werden?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.