0Pricing
C++ Academy · Lección

Referencias const y cuándo utilizarlas

Pase objetos grandes de forma eficiente y segura mediante referencias const.

Referencias const y cuándo utilizarlas es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

Qué garantiza una referencia const

Una const T& indica: «No modificaré aquello a lo que hago referencia». El compilador lo hace cumplir.

void print(const std::string& s) {
    // s.clear();   // ERROR: s is const
    std::cout << s;
}

¿Por qué no pasar simplemente por valor?

Copiar objetos grandes es ineficiente. Una referencia const es prácticamente gratuita — internamente es solo un puntero — y nunca permite que la función modifique los datos del código que llama.

Vincularse a cualquier cosa

Una referencia const puede vincularse a lvalues, rvalues y temporales, por lo que es el tipo de parámetro más permisivo para el acceso de solo lectura.

void f(const std::string& s);
std::string a = "hi";
f(a);                 // lvalue
f("hello");           // temporary string
f(std::move(a));      // rvalue

Extensión de la vida útil

Vincular un temporal a una referencia const prolonga la vida útil del temporal hasta la de la referencia. Resulta útil para construir objetos en línea.

const std::string& greeting = "Hello, " + name;
// the concatenated string lives as long as `greeting`

Cuándo NO usar una referencia const

Para tipos que se pueden copiar trivialmente (int, double, puntero), pase por valor. La referencia añade una indirección sin aportar ningún beneficio.

Referencia const en for basados en rangos

Es el bucle canónico de solo lectura. Evita tanto las copias como las modificaciones accidentales.

for (const auto& x : container) {
    process(x);
}

Retorno de una referencia const

Devuelva una referencia const cuando el resultado sea un objeto existente que el código que llama no deba modificar, como un miembro o un valor almacenado en caché.

class Person {
    std::string name_;
public:
    const std::string& name() const { return name_; }
};

Corrección respecto a const

Marque como const cada parámetro y función miembro que no modifique el estado. El compilador detectará las escrituras accidentales, lo que proporciona una potente red de seguridad.

Funciones miembro const

Una función miembro marcada como const después de la lista de parámetros no puede modificar el objeto. Se puede llamar sobre instancias const.

class Counter {
    int n_ = 0;
public:
    int value() const { return n_; }   // pure reader
    void increment() { n_++; }
};

Problema: const_cast elimina const

Puede eliminar const mediante const_cast, pero hacerlo sobre un objeto que originalmente era const produce un comportamiento indefinido. Úselo únicamente al interactuar con API antiguas que no usan const.

mutable para el estado interno

La palabra clave mutable permite que una función miembro const modifique miembros específicos, lo que resulta útil para la caché o los mutex.

class Cache {
    mutable std::mutex mtx_;
    mutable std::optional<int> cached_;
public:
    int value() const {
        std::lock_guard<std::mutex> lk(mtx_);
        // ...
    }
};

Comprobación rápida

¿Por qué suele ser mejor escribir const std::string& en lugar de std::string para un parámetro?

Resumen

Use const T& para parámetros de solo lectura, valores de retorno de getters y bucles basados en rangos. Es más rápido que el paso por valor para tipos no triviales y más seguro que las referencias no const.

Preguntas frecuentes

¿La lección «Referencias const y cuándo utilizarlas» es gratis?

Sí — el texto completo de «Referencias const y cuándo utilizarlas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Referencias const y cuándo utilizarlas»?

Pase objetos grandes de forma eficiente y segura mediante referencias const. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Referencias const y cuándo utilizarlas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Por qué las referencias son alias de variables
  2. Paso por valor frente a paso por referencia
  3. Referencias const y cuándo utilizarlas
  4. Duración de las referencias y referencias colgantes
← Volver a C++ Academy