Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

378
Views
Proceso de conversión de tipos dentro de sentencias de selección e iteración en C++

Según C++ ISO:

El valor de una condición que es una declaración inicializada en una declaración que no sea una declaración de cambio es el valor de la variable declarada convertida contextualmente a bool (7.3). Si esa conversión está mal formada, el programa está mal formado. El valor de una condición que es una declaración inicializada en una declaración de cambio es el valor de la variable declarada si tiene un tipo integral o de enumeración, o de esa variable implícitamente convertida a un tipo integral o de enumeración en caso contrario. El valor de una condición que es una expresión es el valor de la expresión, convertida contextualmente a bool para declaraciones que no sean switch; si esa conversión está mal formada, el programa está mal formado.

La siguiente cita proviene de la sección 7.3 dicha anteriormente:

Ciertas construcciones de lenguaje requieren que una expresión se convierta en un valor booleano. Se dice que una expresión e que aparece en tal contexto se convierte contextualmente a bool y está bien formada si y solo si la declaración bool t(e); está bien formado, para alguna variable temporal inventada t (9.4).

Basado en estos dos, tengo la idea de que switch-statement no siempre realiza conversiones si tiene el tipo apropiado. De lo contrario if-statement parece realizar siempre dicha conversión, incluso si hago algo como if (true){} , comprendí que el valor true se convertiría. Entonces, ¿es lo que sucede? El código: if(true){} ¿convertirá true en boolean? (incluso si true ya es booleano)

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Los comentarios ya discutidos de que está malinterpretando los dos párrafos. Me centraré en el segundo. El mensaje importante es el siguiente:

Hay ciertos contextos en los que los valores pueden sufrir conversiones implícitamente, aunque la conversión en realidad solo es posible explícitamente.

Algunos ejemplos de código podrían ayudar:

 struct foo{ explicit operator bool() {return true;} }; int main() { foo f; bool b(f); // fine ! bool c = f; // error! no viable conversion from f to bool // because foo::operator bool is explicit }

Un foo se puede convertir en un bool pero el operador de conversión es explicit . Por lo tanto bool b(f) (conversión explícita) está bien, mientras que bool c = f; (conversión implícita) no lo es.

Ahora, hay ciertos contextos donde...

Se dice que una expresión e que aparece en tal contexto se convierte contextualmente a bool y está bien formada si y solo si la declaración bool t(e); está bien formado, para alguna variable temporal inventada t (9.4).

Esto explica algunos casos especiales de conversiones. Tal conversión ocurre implícitamente, pero está bien formada exactamente cuando la conversión explícita estaría bien formada.

Sin tal "conversión contextual", esto sería un error del compilador:

 foo f; if (f) {}

Sin embargo, debido a que f es contextualmente convertible a bool , el código está bien. Sin esta regla especial para la conversión contextual, habría que escribir if (bool(f)) porque foo::operator bool es explicit .

En otras palabras, el párrafo no se trata de convertir bool s a bool , sino que explica una excepción de las conversiones implícitas/explícitas habituales, que se aplican cuando es necesario.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!