c++ - reales - ¿Cuál es el propósito de una declaración como int(x); o int(x)=10;
libro de android studio en español pdf (2)
El hecho de que esta regla sea aplicable en su caso no es deliberada: en última instancia, es el resultado de mantener la gramática simple . No hay ningún incentivo para prohibir declaraciones como la suya, pero existen grandes desincentivos para complicar las reglas, especialmente si son intrincadas como son.
En resumen, si no quiere usar esta sintaxis ofuscada innecesariamente, no lo haga.
C ++ rara vez te obliga a escribir un código legible.
Sorprendentemente, hay escenarios en los que los paréntesis pueden salvar el día:
std::string foo();
namespace detail
{
int foo(long); // Another foo
struct Bar
{
friend std::string ::foo(); // Doesn''t compile for obvious reasons.
friend std::string (::foo)(); // Voilà!
};
}
Si observa la gramática de *declarator*s in §8/4
, notará que un noptr-declarator
puede escribirse como ( ptr-declarator
), es decir, puede escribirse como ( declarator-id
), que valida declaraciones como las del título. Como cuestión de hecho, este código se compila sin ningún problema:
#include <iostream>
struct A{ int i;};
int (x) = 100;
A (a) = {2};
int main()
{
std::cout << x << ''/n'';
std::cout << a.i << ''/n'';
}
Pero, ¿cuál es el propósito de permitir estos paréntesis cuando un puntero (a una matriz o a una función) no está involucrado en la declaración?
Estás haciendo la pregunta incorrecta. La pregunta correcta es:
¿Cuál es el propósito de rechazar esta declaración?
La respuesta es: no hay ninguno .
Entonces, dado que esta sintaxis está permitida como un efecto secundario de las reglas en otros lugares, esto es lo que obtienes.