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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren