Ich denke (Gedanken) Ich verstehe auto
. Gleiches über decltype
. In C++ 14 kann man jedoch einige diabolische Dinge wie decltype(auto)
als Rückgabetyp einer Funktion haben. Beachten Sie Folgendes:Warum gibt decltype (auto) hier eine Referenz zurück?
decltype(auto) foo()
{
int m = 1;
return m;
}
Der Rückgabetyp ist int
, alles Sinn macht. Jedoch
,
decltype(auto) foo()
{
int m = 1;
return (m);
}
kehrt int&
(d.h. Bezug auf int
).
Ich habe absolut keine Ahnung warum das passiert, warum machen diese Klammern überhaupt einen Unterschied !? Hoffe, jemand kann etwas Licht in diese Sache bringen.
PS: Ich habe auch mit C++
getaggt, da es viel mehr Leute gibt, die das C++
Tag als C++14
überprüfen.
Weil 'declltype ((m))' auch eine Lvalue-Referenz ist. – 0x499602D2
Ich dachte schon, also macht das Klammern zu einem Wert? Wenn ich zum Beispiel "(Foo())" zurückgebe, wird angenommen, dass ein Verweis auf "Foo()" zurückgegeben wird. – vsoftco
@vsoftco nein, die Regeln für 'declltype (e)' hängen davon ab, ob 'e' in Klammern gesetzt ist oder nicht. Das bedeutet nicht, dass an anderer Stelle Klammern hinzugefügt werden. –