Evaluación Declaración CIN == (Expresión) -- ++ campo con return-value campo con cout campo con cin camp Relacionados El problema

evaluating statement cin==(expression)


0
vote

problema

Español

¿Qué tiene la intención de hacer el código?

  return cin==(cout<<(f(a)==f(b)?"YES":"NO"));    

Asumir F () es una función de devolución de cadenas y A y B son las cadenas también y la firma de la función es

  var teste:XmlLang = new XmlLang(1); 0  

¡Gracias de antemano!

Original en ingles

What does the code below intended to do?

return cin==(cout<<(f(a)==f(b)?"YES":"NO"));  

assume f() is a string returning function and a and b are strings as well and function's signature is

string f(string a) 

Thanks in advance!

           
         
         

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

La respuesta es: Depende de la norma C ++ contra la compilación. Se reduce a las funciones de conversión en std::basic_ios

C ++ 03

Aquí, tenemos operator void*() const , que:

Devuelve un puntero nulo si fail() devuelve true , de lo contrario devuelve un puntero no nulo. Este puntero es implícitamente convertible en bool y se puede usar en contextos booleanos.

Así, en la expresión:

  cin==(cout<<(f(a)==f(b)?"YES":"NO"));    

Imprimiríamos "sí" o "no", y el resultado de la salida de la corriente sería cout aún (en forma de un std::ostream& ). Cuando hacemos la comprobación de igualdad, ambos operandos se convirtieron implícitamente a void* y, por lo tanto, la expresión verifica ver si ambas transmisiones fallaron. Esta es una forma particularmente abustácica de hacer:

  std::basic_ios0  

C ++ 11

con C ++ 11, el std::basic_ios1111 se reemplaza por std::basic_ios2 . El std::basic_ios3 es clave, ya que significa que la función de conversión solo se puede usar explícitamente (como en, a través de un reparto directo) o en un contexto booleano, como en:

  std::basic_ios4  

La igualdad no es un contexto booleano, por lo que en la expresión

  std::basic_ios5  

que la función de conversión no será invocada. Como no hay std::basic_ios6 definido en std::basic_ios7 (o std::basic_ios8 o std::basic_ios9 ), la expresión simplemente no se compilará.

 

The answer is: it depends on what C++ standard you're compiling against. It boils down to the conversion functions in std::basic_ios

C++03

Here, we have operator void*() const, which:

Returns a null pointer if fail() returns true, otherwise returns a non-null pointer. This pointer is implicitly convertible to bool and may be used in boolean contexts.

Thus, in the expression:

cin==(cout<<(f(a)==f(b)?"YES":"NO"));  

we would print either "YES" or "NO", and the result of the stream output would be cout still (in the form of a std::ostream&). When we do the equality check, both operands would be implicitly converted to void* and so the expression checks to see if both streams failed. This is a particularly obfusticated way of doing:

cout << (f(a) == f(b) ? "YES" : "NO"); return cin.fail() && cout.fail(); 

C++11

With C++11, the operator void*() const is replaced by explicit operator bool() const. The explicit is key, as it means that the conversion function can only be used explicitly (as in, via a direct cast) or in a boolean context, as in:

if (cin) { // calls cin.operator bool() } 

Equality is not a boolean context, so in the expression

cin == cout 

that conversion function will not be invoked. As there is no operator== defined on std::basic_ios (or std::istream or std::ostream), the expression will simply not compile.

 
 
         
             

Relacionados problema

1  CIN Falla de obtener la entrada  ( Cin failing to get the input ) 
Quiero poder leer lo siguiente: myvar = { 1 2 3 5 } Entonces, lo que he hecho es string input; int intInput; cin >> input; //take in the varname, d...

-2  ¿Por qué mi aplicación se está cerrando aunque tengo Cin.get ()?  ( Why is my application closing even though i have cin get ) 
Entonces, como dice el título, no quiero usar el sistema ("pausa") porque no quiero desarrollar un mal habbit. Y no puedo averiguar por qué se mantiene cerran...

1  ¿Cómo saltar a CIN a propósito en C ++?  ( How to skip cin on purpose in c ) 
Necesito tener un funcionamiento de un rato y aceptar la entrada cuando haya una entrada. No soy nuevo en C ++, pero este obstáculo es bastante difícil. Debid...

0  ¿Asignar variables mientras ignoran los símbolos? (C ++) [duplicar]  ( Assigning variables while ignoring symbols c ) 
Esta pregunta ya tiene respuestas aquí : ¿Cómo lo hago sobre las palabras de una cadena? ...

116  ¿Cómo puedo descargar el búfer de CIN?  ( How do i flush the cin buffer ) 
¿Cómo borro el búfer de CIN en C ++? ...

3  char * y cinando en C ++  ( Char and cin in c ) 
Me gustaría ingresar una cadena de longitud indefinida a una variable de char * usando CIN; Puedo hacer esto: public static $STATUS = array( 1 => ...

12  C ++ Tener CIN Lee un personaje de retorno  ( C having cin read a return character ) 
Me preguntaba cómo usar cin para que si el usuario no ingresa ningún valor y solo empuja ENTER que reconocerá Esto como entrada válida. ...

45  Usando Getline (CIN, S) después de CIN [DUPLICADO]  ( Using getlinecin s after cin ) 
Esta pregunta ya tiene respuestas aquí : ¿Por qué STD :: Getline () Omitir entrada después de una ex...

0  Tome la entrada de cadena con espacios [duplicado]  ( Take string input with spaces ) 
Esta pregunta ya tiene respuestas aquí : usando Getline (CIN, S) después de CIN [DUPLICATE] ...

1  CIN / COUT CON CHAR []  ( Cin cout with char ) 
Estoy tratando de construir mi experiencia general en C ++ que viene de VBA, así que perdone cualquier problema deslumbrante con mi código ... usando este sim...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos