Perguntas com a marcação «constexpr»

constexpr é um modificador introduzido em C ++ 11, que informa ao compilador que o valor de uma função ou variável é conhecido ou pode ser calculado em tempo de compilação. Como tal, pode ser usado como uma constante em lugares onde, de outra forma, não poderia ser.

337
Quando você deve usar o recurso constexpr no C ++ 11?

Parece-me que ter uma "função que sempre retorna 5" está quebrando ou diluindo o significado de "chamar uma função". Deve haver um motivo ou uma necessidade desse recurso ou não seria no C ++ 11. Por que está aí? // preprocessor. #define MEANING_OF_LIFE 42 // constants: const int MeaningOfLife =...

175
É possível usar std :: string em um constexpr?

Usando C ++ 11, Ubuntu 14.04, cadeia de ferramentas padrão do GCC . Este código falha: constexpr std::string constString = "constString"; erro: o tipo 'const string {aka const std :: basic_string}' da variável constexpr 'constString' não é literal ... porque ... 'std :: basic_string' possui um...

105
Constexpr implica inline?

Considere a seguinte função embutida: // Inline specifier version #include<iostream> #include<cstdlib> inline int f(const int x); inline int f(const int x) { return 2*x; } int main(int argc, char* argv[]) { return f(std::atoi(argv[1])); } e a versão equivalente constexpr: //...

96
O que significa “envenenar uma função” em C ++?

No final da palestra de Scott Schurr "Apresentando constexpr" na CppCon , ele pergunta "Existe uma maneira de envenenar uma função"? Ele então explica que isso pode ser feito (embora de uma forma não padronizada) por: Colocando um throwem uma constexprfunção Declarando um não resolvido extern...

95
Constexpr vs macros

Onde devo preferir usar macros e onde devo preferir constexpr ? Eles não são basicamente os mesmos? #define MAX_HEIGHT 720 vs constexpr unsigned int max_height = 720;

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

Eu estava brincando com autono std::pair. No código abaixo, a função fdeve retornar um std::pairdos tipos que dependem de um parâmetro de modelo. Um exemplo de trabalho: EXEMPLO 1 template <unsigned S> auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if...

13
Como uma const expr pode ser avaliada tão rapidamente

Eu tenho experimentado expressões const que são avaliadas em tempo de compilação. Mas eu brinquei com um exemplo que parece incrivelmente rápido quando executado em tempo de compilação. #include<iostream> constexpr long int fib(int n) { return (n <= 1)? n : fib(n-1) + fib(n-2); }...

11
O span pode ser constexpr?

Todos os construtores de std :: span são declarados constexpr, no entanto, não consigo fazer com que nenhum deles funcione em um contexto constexpr. Descomentar qualquer um dos constexpr abaixo resultará em um erro de compilação. #include <array> #include <span> int main() {...