2010-07-24 27 views
5

En el ejemplo siguiente, ¿qué hace exactamente el operador <<? Supongo que no es un operador bit a bit.¿Qué está haciendo el operador << en C++?

std::cout << "Mouse down @ " << event.getPos() << std::endl; 

entiendo lo que el código va a hacer aquí: Uso salida estándar, enviar este texto, envíe un extremo de la línea. Simplemente, nunca he encontrado el uso de este < <, aparte del binario en bruto.

Estoy empezando con C++. Y, como operador de tipo, es difícil buscar una descripción de esto y lo que significa. ¿Puede alguien aclararme y/o darme un puntero sobre a qué googlear?

Gracias Ross

+0

Está equivocado, porque no reemplazará al @. – Puppy

Respuesta

11

La respuesta es: el operador << hace cambios a la izquierda por defecto para los tipos integrales, ¡pero puede sobrecargarse para hacer lo que quiera!

Esta sintaxis para las cadenas de tuberías en una secuencia fue primero (creo) demostrado en el libro epónimo del inventor de C++ Bjarne Stroustroup The C++ Programming Language. Personalmente, creo que redefinir un operador para hacer IO es engañoso; es un código de demostración atractivo pero no contribuye a que el código sea comprensible. La sobrecarga del operador como técnica ha sido ampliamente criticada en la comunidad del lenguaje de programación.


EDIT: Puesto que nadie más ha mencionado esto todavía:

operator<< se define en la clase ostream, de los cuales cout es una instancia. La definición de clase se encuentra en el iostream library, que es #include 'd como <iostream>.

+0

Creo que es una gran herramienta para decir exactamente lo que quiere en su código, y muy útil cuando usa cadenas de caracteres y flujos de datos de tuberías en algo – rubenvb

+0

En realidad, si quiere ser pedante, 'operator <<' es una función gratuita con un 'ostream' ya que es el primer argumento. –

+0

@Billy ONeal: Seguramente eres más experto que yo, pero ¿no es un método de instancia de la clase 'ostream', con (lo que sea a la derecha) como su primer argumento? –

-4

Es un "desplazamiento a la izquierdabit a bit" operador.

n < < p

desplaza los bits de las posiciones p n izquierda. Los bits cero se desplazan a las posiciones de orden inferior. 3 < < 2 es 12.

En el contexto de la pregunta que empuja algo en ' cout', que es la secuencia de salida actual.

+0

-1 No en este contexto ... –

+0

@Nick Brooks: He editado su última línea para que sea un poco más clara, pero es probable que sea demasiado tarde para guardar su respuesta del odio que está recibiendo. –

3

Esto a veces se denomina 'operador de inserción de secuencias', y este es el uso más común: para insertar datos en una secuencia. A veces, sin embargo, lo he visto sobrecargado para insertar datos en otros objetos cuando hago cosas como la serialización, por ejemplo.

3

Como cualquier operador en C++, < < está haciendo operaciones. Usando la sobrecarga, con un operando ostream a la izquierda (std :: cout es de tipo ostream), se usa como un operador de flujo para imprimir datos de varios tipos. Por ejemplo, se puede hacer

int x = 10; 
std::string y = " something"; 
std::cout << x << y << std::endl; 

Esta es la salida "10 algo".

@ no se reemplaza por nada en este contexto. operador < < simplemente descargue el resultado.

std :: endl no es solo el final de la línea, sino que también vacía el resultado en el dispositivo de salida.

+0

gracias por marcar el '@' y std :: endl también. – Ross

1

intentar escribir un programa que se puede crear un objeto y llama a la sobrecarga < < operador,

class x { 
    //declare some pvt variables 
    //overload << operator 
}; 

int main() { 
    x obj; 
    cout << obj; 
} 

Al hacerlo, usted va a entender la lógica detrás del uso de la siguiente declaración

cout << string_var << int_var; 

Puede asume 'cadena' e 'int' como clases que han sobrecargado el operador < < aunque no sea verdadero.