Sto cercando di capire perché not_a_ref
non è un riferimento. Capisco che posso fare riferimento a auto &
. Ho scavato nello standard per un po ', ma mi sono perso e non riuscivo a capire dove questo comportamento è definito.Perché l'auto non è un riferimento quando il suo inizializzatore è un riferimento?
Esempio:
#include <vector>
#include <iostream>
#include <type_traits>
std::vector<int> stuff;
std::vector<int>& get_stuff()
{
return stuff;
}
int main()
{
auto not_a_ref = get_stuff();
if(std::is_reference<decltype(not_a_ref)>::value)
std::cout << "is_reference true" << std::endl;
else
std::cout << "is_reference false" << std::endl;
if(¬_a_ref != &stuff)
std::cout << "definately not a reference" << std::endl;
return 0;
}
Sarebbe abbastanza fastidioso se funzionasse come pensavate. Renderebbe meno utile il 'auto', perché aggiungere un riferimento è facile, ma rimuoverne uno è un dolore. –
Non sto affatto suggerendo che dovrebbe essere diverso da quello che è, solo cercando di capire come questo comportamento è specificato nello standard. Fa parte del mio personale obiettivo di essere in grado di capire questo genere di cose semplicemente leggendo lo standard - ma mi sono bloccato. – Zac
[Ecco il documento.] (Http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf) Non ho voglia di guardare nello standard, quindi ho solo su Google. La prima pagina ha un esempio di una funzione che restituisce un riferimento a un oggetto float e il tipo viene dedotto in float. –