Operadores de subíndice y llamada a función
Sobrecargue [] y () para que los tipos se comporten como contenedores u objetos invocables.
Operadores de subíndice y llamada a función 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.
operator[] — Acceso indexado
Sobrecargue [] para que su tipo pueda usarse como un array. Resulta útil para contenedores, matrices y clases de imágenes.
class Vec {
std::vector<double> data_;
public:
double& operator[](size_t i) { return data_[i]; }
double operator[](size_t i) const { return data_[i]; }
};Dos sobrecargas: const y no const
Proporcione ambas. Al invocar el operador sobre una instancia const, se selecciona la sobrecarga const; la versión no const permite realizar asignaciones.
Comprobación de límites
Por convención, operator[] no comprueba los límites. Proporcione un método at() independiente que lance una excepción, como hace la biblioteca estándar.
double& at(size_t i) {
if (i >= data_.size()) throw std::out_of_range("");
return data_[i];
}Subíndice multidimensional (C++23)
C++23 añadió el subíndice con elementos separados por comas: m[i, j]. Las versiones anteriores necesitan una llamada a función o subíndices encadenados.
// C++23
double& operator[](size_t i, size_t j);
// Pre-C++23 workaround
double& operator()(size_t i, size_t j);operator() — Llamada a función
Sobrecargue () para que las instancias se puedan invocar. Se usa para functors, indexación de matrices y predicados configurables.
struct Square {
int operator()(int x) const { return x * x; }
};
Square sq;
std::cout << sq(5); // 25Functors con estado
El operador de llamada a función funciona con variables miembro, lo que permite crear un objeto invocable con estado.
struct GreaterThan {
int threshold;
bool operator()(int x) const { return x > threshold; }
};
GreaterThan over10{10};
std::cout << over10(15); // trueUso con algoritmos de la STL
Pase instancias de functors a los algoritmos en lugar de funciones.
std::vector<int> v = {1, 11, 2, 22};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});Operadores con varios argumentos
Tanto [] (antes de C++23) como () se pueden sobrecargar con cualquier número de argumentos. Antes de C++23, () es la opción más flexible para el acceso tipo matriz.
Devolver referencias frente a valores
Devuelva una referencia para permitir asignaciones a través del subíndice. Devuelva por valor en los tipos de solo lectura.
Objetos proxy
Si operator[] necesita devolver un objeto complejo, como un campo de bits, devuelva una clase proxy pequeña con operadores de conversión y asignación.
Ejemplos del mundo real
Usos habituales:
std::vector::operator[]std::map::operator[]— inserta las claves ausentes- Clases de matrices:
m(i, j) - Functors para algoritmos
Comprobación rápida
¿Cómo puede hacer que las instancias de una clase se puedan invocar como una función?
Resumen
Sobrecargue [] para el acceso indexado y proporcione sobrecargas const y no const. Sobrecargue () para que las instancias se puedan invocar; es la base de los functors y las lambdas.
Preguntas frecuentes
¿La lección «Operadores de subíndice y llamada a función» es gratis?
Sí — el texto completo de «Operadores de subíndice y llamada a función» 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 «Operadores de subíndice y llamada a función»?
Sobrecargue [] y () para que los tipos se comporten como contenedores u objetos invocables. 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 «Operadores de subíndice y llamada a función»?
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
- Operadores aritméticos y de comparación
- Operadores de inserción y extracción de streams
- Operadores de subíndice y llamada a función
- Operador de comparación de tres vías en C++20