Myślę (myślę) Rozumiem auto
. To samo dotyczy decltype
. Jednak w C++ 14 można mieć pewne diaboliczne rzeczy jak decltype(auto)
jako typ zwracany przez funkcję. Rozważmy następujący:Dlaczego decltype (auto) zwraca referencję tutaj?
decltype(auto) foo()
{
int m = 1;
return m;
}
Typ zwracany jest int
, wszystko ma sens.
Jednakże
decltype(auto) foo()
{
int m = 1;
return (m);
}
powraca int&
(to odniesienie do int
).
Nie mam absolutnie żadnego pomysłu, dlaczego tak się dzieje, dlaczego te nawiasy mają jakąkolwiek różnicę !? Mam nadzieję, że ktoś może rzucić trochę światła na to.
PS: Oznaczono również tagiem C++
, ponieważ jest o wiele więcej osób, które sprawdzają tag C++
niż C++14
.
Ponieważ 'decltype ((m))' jest także wartością odniesienia l. – 0x499602D2
Tak myślałem, więc umieszczenie nawiasów wokół sprawia, że jest to lwartość? Oznacza to, że jeśli zrobię "return (Foo())", jest uważany za zwracający odwołanie do 'Foo()'? – vsoftco
@vsoftco nie, reguły dla 'decltype (e)' zależą od tego, czy 'e' jest nawiasie, czy też nie. Nie oznacza to, że dodawanie nawiasów gdzie indziej ma tego rodzaju efekt. –