Programação constexpr
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.
Qual é a diferença entre constexpre const? Quando posso usar apenas um deles? Quando posso usar os dois e como devo escolher um?
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 = …
337 c++ c++11 constexpr
const vs constexpr em variáveis
Existe uma diferença entre as seguintes definições? const double PI = 3.141592653589793; constexpr double PI = 3.141592653589793; Caso contrário, qual estilo é preferido no C ++ 11?
A variável constexpr estática dentro de uma função faz sentido?
Se eu tenho uma variável dentro de uma função (digamos, uma matriz grande), faz sentido declará-la statice constexpr? constexprgarante que a matriz é criada em tempo de compilação, então isso seria staticinútil? void f() { static constexpr int x [] = { // a few thousand elements }; // do …
192 c++ static c++11 constexpr
Referência indefinida ao estático constexpr char []
Eu quero ter uma static const charmatriz na minha classe. O GCC reclamou e me disse que eu deveria usar constexpr, embora agora esteja me dizendo que é uma referência indefinida. Se eu fizer da matriz um não membro, ela será compilada. O que está acontecendo? // .hpp struct foo …
186 c++ c++11 static-members constexpr
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 const char* Referenciando o …
96 c++ constexpr
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;
95 c++ c++11 macros constexpr
Compilar o comprimento de uma string C em tempo de compilação. Este é realmente um constexpr?
Estou tentando calcular o comprimento de uma string literal em tempo de compilação. Para fazer isso, estou usando o seguinte código: #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); } Tudo funciona …
Como posso obter a profundidade de um std :: vector multidimensional em tempo de compilação?
Eu tenho uma função que tem uma std::vectordimensão multidimensional e requer que a profundidade (ou o número de dimensões) seja passada como um parâmetro de modelo. Em vez de codificar esse valor, eu gostaria de escrever uma constexprfunção que aceite std::vectore retorne a profundidade como um unsigned integervalor. Por exemplo: …
45 c++ templates stdvector template-meta-programming constexpr
Alguma dica substituindo o const global char [] por constexpr string_view?
Nossa equipe está trabalhando com uma base de código C ++ com mais de 10 anos e recentemente mudou para um compilador C ++ 17. Então, estamos procurando maneiras de modernizar nosso código. Em uma conferência no YouTube, ouvi a sugestão de substituir const char*as cordas globais por constexpr string_view. …
17 c++ c++17 constexpr string-view
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 &lt;unsigned S&gt; auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr …
16 c++ c++17 constexpr auto std-pair
Por que std :: swap não está marcado como constexpr antes do C ++ 20?
No C ++ 20, std::swaptorna-se uma constexprfunção. Eu sei que a biblioteca padrão realmente ficou para trás da linguagem na marcação de coisas constexpr, mas em 2017, ela &lt;algorithm&gt;estava praticamente consexprada como muitas outras coisas. No entanto - std::swapnão era. Lembro-me vagamente de algum defeito de linguagem estranho que impedia …