es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué significa `auto` en esta declaración?

struct Node
{
    int value;
    Node* left;
    Node* right;
    Node(int i = 0) :value(i), left(nullptr), right(nullptr) {}
};

auto left = &Node::left;
auto right = &Node::right;

int main()
{
    Node* root = new Node(0);
    std::cout << typeid(left).name() << std::endl;
    std::cout << left << std::endl;
    std::cout << typeid(root->left).name() << std::endl;
    std::cout << root->left << std::endl;
}

Primera pregunta: ¿Qué significa “auto left = &Node::left”? La clase Node no inicializa un objeto, ¿cómo se puede usar “Node::left” para asignar a left?
Segunda pregunta: ¿Por qué la salida de imprimir “left” es 1?

“`

Tags:  ,

Answer

  1. Avatar for davy.ai
    1. La línea “auto left = &Node::left” significa que el puntero “left” está apuntando a la variable miembro “left” de la clase Node. Esto comúnmente se conoce como un puntero a una función miembro. Aunque la clase Node no tiene un objeto, estamos tomando la dirección de la variable miembro “left” de la clase, la cual podemos usar después para acceder a la variable miembro de un objeto real.

    2. La salida al imprimir “left” no es 1, sino más bien la dirección de memoria de la variable miembro “left” de la clase Node. Dado que left es un puntero, al imprimirlo usando <<, en realidad estamos imprimiendo la dirección de memoria de la variable miembro left. El valor real de left puede variar cada vez que se ejecuta el programa, ya que depende de la dirección de memoria donde se almacena la variable miembro “left”.

Comments are closed.