Ich habe folgende Codewarum rvalue nicht zuweisen Referenzvariable constexpr
constexpr int into(int a,int b)
{
int c=a*b;
return c;
}
int main()
{
constexpr int &n=into(5,5);
}
und ich habe (in MSDN)
Das Schlüsselwort
constexpr
eingeführt wurde in C++ 11 und verbessert in C++ 14. Es bedeutet konstanten Ausdruck. Wieconst
kann es auf Variablen angewendet werden, so dass ein Compilerfehler ausgelöst wird, wenn ein Code versucht, den Wert zu ändern.
Nachdem ich es las, dachte ich, dass constexpr
kann anstelle von const
verwendet werden, aber für den obigen Code erhalte ich einen Compiler-Fehler unter Angabe
`int main()': invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'`
Wenn constexpr
mit Fassung const
, es funktioniert gut. Ich verstehe dieses Verhalten nicht; Kann jemand Licht abwerfen?
Eine 'constexpr'-Referenz muss an eine globale Variable gebunden werden. Siehe Antwort [hier] (http://stackoverflow.com/a/28614655/1460794). – wally
@ flatmouse, danke für die Wiederholung ... eine der Antworten im Link sagt "Eine Referenz ist konzeptionell gleichbedeutend mit der Adresse der Variablen, und die Adresse einer lokalen Variablen ist keine Konstante" hier, wenn ich const es bindet. aber nicht nur für den constexpr.i glaube das Verhalten von const und consxpr zu einer Variablen ist das gleiche –
Das Problem könnte sein, dass der Rückgabewert von 'in' nirgends gespeichert wird, aber Sie speichern einen Verweis auf diesen Rückgabewert, so Wohin muss diese Referenz verweisen? – Oebele