tamaño salir personalizar pantalla mas letra lenguaje hacer grande fuente dev consola completa como aumentar agrandar c++ scope overloading default-value

salir - personalizar dev c++



En C++, ¿el alcance de un parámetro con nombre incluye la expresión para su valor predeterminado? (2)

Desde basic.scope.pdecl/1 :

El punto de declaración para un nombre es inmediatamente después de su declarador completo y antes de su inicializador (si lo hubiera), excepto como se indica a continuación.

Ejemplo:

unsigned char x = 12; { unsigned char x = x; }

Aquí el segundo x se inicializa con su propio valor (indeterminado).

Clang es consistente con esta sección de la norma. GCC solo parece aplicarlo en {block} .

Dado:

constexpr int d() {return 42;}

Lo siguiente falla en Clang, pero funciona en GCC:

static int e(int d = d()) {return d;} // This ^^d should refer to the new name that shadows ::d()

Lo siguiente falla tanto en Clang como en GCC:

void func(){ int d = d(); // ^^d here refers to the new name that shadowed ::d(); }

Ejemplo: ¿Es esto legal C ++ 14?

#include <iostream> static int d() { return 42; } static int e(int d = d()) { return d; } int main() { std::cout << e() << " " << e(-1) << std::endl; }

g ++ 5.4 con -std=c++14 le gusta, pero clang ++ 3.8 con -std=c++14 queja:

samename.cxx:3:23: error: called object type ''int'' is not a function or function pointer static int e(int d = d()) {return d;} ~^


Parece que no es legal: consulte la especificación de C ++ 14 ( sección 3.3.2 - Punto de declaración ).

int x = 5; { int x = x; } // second x is initialized with its own undetermined state { int x[x]; } // declares an array with 5 elements, since the declaration of // second x is not complete when the first x is used

En su caso, la declaración de d está completa, por lo que cuando usa d() se refiere a la variable, no a la función.