Estoy tratando de entender por qué not_a_ref
no es una referencia. Entiendo que puedo hacer una referencia por auto &
. Busqué en el estándar por un tiempo, pero me perdí y no pude entender dónde se define este comportamiento.¿Por qué Auto no es una referencia cuando su inicializador es una referencia?
Ejemplo:
#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;
}
Sería bastante molesto si funcionara de la manera que creías. Sería 'auto 'mucho menos útil, porque agregar una referencia es fácil, pero eliminar uno es un problema. –
No estoy sugiriendo de ninguna otra manera que sea de otra manera, solo trato de entender cómo se especifica este comportamiento en el estándar. Es parte de mi objetivo personal de poder resolver este tipo de cosas simplemente leyendo el estándar, pero me quedé atascado. – Zac
[Aquí está el documento.] (Http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf) No tengo ganas de buscar en el estándar, así que solo googleó eso. La primera página tiene un ejemplo de una función que devuelve una referencia a un flotante, y el tipo se deduce para flotar. –