Preguntas etiquetadas con constexpr

constexpr es un modificador introducido en C ++ 11, que informa al compilador que el valor de una función o variable es conocido o puede calcularse en tiempo de compilación. Como tal, puede usarse como una constante en lugares donde de otra manera no podría ser.

337
¿Cuándo debe usar la capacidad constexpr en C ++ 11?

Me parece que tener una "función que siempre devuelve 5" es romper o diluir el significado de "llamar a una función". Debe haber una razón, o una necesidad de esta capacidad o no estaría en C ++ 11. ¿Por qué está ahí? // preprocessor. #define MEANING_OF_LIFE 42 // constants: const int...

175
¿Es posible usar std :: string en un constexpr?

Usando C ++ 11, Ubuntu 14.04, cadena de herramientas predeterminada de GCC . Este código falla: constexpr std::string constString = "constString"; error: el tipo 'const string {aka const std :: basic_string}' de la variable constexpr 'constString' no es literal ... porque ... 'std ::...

96
¿Qué significa "envenenar una función" en C ++?

Al final de la charla de Scott Schurr "Introducing constexpr" en CppCon , pregunta "¿Hay alguna manera de envenenar una función"? Luego explica que esto se puede hacer (aunque de una manera no estándar) mediante: Poner un throwen una constexprfunción Declarando un no resuelto extern const...

92
Constexpr vs macros

¿Dónde debería preferir usar macros y dónde debería preferir constexpr ? ¿No son básicamente iguales? #define MAX_HEIGHT 720 vs constexpr unsigned int max_height = 720;

16
std :: pair <auto, auto> tipo de retorno

Estaba jugando con autoadentro std::pair. En el siguiente código, fse supone que la función devuelve una std::pairde los tipos que dependen de un parámetro de plantilla. Un ejemplo de trabajo: EJEMPLO 1 template <unsigned S> auto f() { if constexpr (S == 1) return std::pair{1, 2}; //...

13
¿Cómo se puede evaluar un const expr tan rápido?

He estado probando expresiones constantes que se evalúan en tiempo de compilación. Pero jugué con un ejemplo que parece increíblemente rápido cuando se ejecuta en tiempo de compilación. #include<iostream> constexpr long int fib(int n) { return (n <= 1)? n : fib(n-1) + fib(n-2); }...

11
Puede abarcar ser constexpr?

Todos los constructores de std :: span se declaran constexpr, sin embargo, parece que no puedo hacer que ninguno de ellos funcione en un contexto constexpr. Descomentar cualquiera de los constexpr a continuación dará como resultado un error de compilación. #include <array> #include...