¿Existe alguna diferencia entre estas dos declaraciones dentro de una función?
bool returnValue = true;
// Code that does something
return(returnValue);
¿y esto?
bool returnValue = true;
// Code
return returnValue;
El primero tiene paréntesis returnValue
.
c++
/c
. Sería bueno ser más específico en la definición del lenguaje, pero no sé cómo solucionarlo 9 años después.C
hay un duplicado stackoverflow.com/questions/161879/…Respuestas:
A partir de C ++ 14, a menudo lo son.
C ++ 14 agrega un caso marginal donde los paréntesis alrededor de un valor de retorno pueden alterar la semántica. Este fragmento de código muestra la declaración de dos funciones. La única diferencia son los paréntesis alrededor del valor de retorno.
int var1 = 42; decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1) decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1))
En el primero
func1
devuelve unint
y en el segundofunc1
devuelve unint&
. La diferencia semántica está directamente relacionada con los paréntesis que la rodean .El
auto
especificador en su forma más reciente se introdujo en C ++ 11. En la especificación del lenguaje C ++ se describe como:Además, C ++ 11 introdujo el
decltype
especificador que se describe en las especificaciones del lenguaje C ++ :En C ++ 14,
decltype(auto)
se permitía la capacidad de uso para los tipos de devolución de funciones. Los ejemplos originales son donde entra en juego la diferencia semántica entre paréntesis. Revisando los ejemplos originales:int var1 = 42; decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1) decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1))
decltype(auto)
permite que el tipo de retorno final en la función se deduzca de la entidad / expresión en la declaración de retorno. En la primera versiónreturn var1;
es efectivamente lo mismo que devolver el tipodecltype(var1)
(unint
tipo de devolución según la regla 1 anterior) y en el segundo casoreturn (var1);
es efectivamente lo mismo quedecltype((var1))
(unint &
tipo de devolución según la regla 2b).Los paréntesis hacen el tipo de retorno en
int&
lugar deint
, por lo tanto, un cambio en la semántica. Moraleja de la historia: "No todos los paréntesis de un tipo de devolución son iguales"fuente
return (x);
sea equivalente areturn &x;
, ni debería ser posible que resulte en una devolución de el valor de x pero con el tipo de referencia ax.auto
bastante frecuencia. ¿Nuestra semántica nunca cambia mientras nos mantengamos alejadosdecltype
? Temo un comportamiento inesperado cuando pasamos a la siguiente versión del compilador que incorpora el próximo Visual Studio.No hay diferencia.
Una razón para usar paréntesis sería si quisiera evaluar una expresión antes de regresar, pero en su ejemplo, no habría ninguna razón. Ver:
Paréntesis que rodean los valores devueltos
para mayor discusión.
fuente
return m * x + c
yreturn (m * x + c)
oreturn ( (m * x) + c )
o etc - y que no se ve mejor o más intuitivo o bien, si me preguntas.Los paréntesis del ejemplo superior son superfluos; son efectivamente ignorados.
Sería lo mismo que algo como ...
int x = (5);
Los paréntesis aquí también se ignoran.
fuente
AFAIK, nada es diferente.
En C ++, las expresiones pueden tener la forma:
expr
o(expr)
. Entonces, esta última es una expresión con más escritura. Para leer más sobre esto, consulte una gramática (busque "expresión").fuente
No, no hay diferencia en tu código.
fuente
Supongo que
boo
es un error tipográfico y se pregunta si hay una diferencia entrereturn expr;
y
return(expr);
La respuesta es no.
fuente
¡¡Ninguna diferencia!!
La gente usa paréntesis si hay una expresión compleja involucrada.
Por cierto,
return
es una declaración, no una función.fuente
No, no hay diferencia entre los dos, aunque puede incluir paréntesis si hace que la expresión sea fácil de leer y clara.
fuente
return
es un operador codicioso y quereturn m * x + c
podría regresarm
y descartar el resto, o qué?¡Estás ralentizando abusivamente el compilador!
La presencia de paréntesis no solo ralentiza la fase de preprocesamiento, sino que también genera un árbol de sintaxis abstracta más complicado: más memoria, más cálculo.
¿Desde un punto de vista semántico? Son exactamente idénticos. Ya sea que haya paréntesis o no, la
return
declaración evaluará completamente la expresión antes de devolverla.fuente
Son idénticos. Veo la sintaxis entre paréntesis con bastante frecuencia y siempre les pregunto a quienes la usan: ¿por qué ? Y nadie puede responder por qué lo usan.
Para resumir sin rodeos, las personas que no comprenden bien la diferencia entre macros y funciones similares a funciones, o que están confundidas acerca de la precedencia de los operadores o el orden de las reglas de evaluación en C. estilo se beneficia del uso de paréntesis.
Así
return value;
es más correcto que
return (value)
porque este último sugiere que no sabes muy bien lo que estás haciendo :)
fuente
Ambos son iguales en tu caso.
fuente
a
es5
entoncesreturn a++;
yreturn (a++);
(que es lo mismo) ambos regresarán5