es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo pasar un constexpr como parámetro de una función en C++

Tengo una función simple que llena una matriz con valores de tipo double y devuelve la matriz:

double create_step_vectors(int n_steps, double step_size)
{
    std::array<double, n_steps="" +="" 1=""> vec{};
    for (int i = 0; i <= n_steps; i++)
    {
        vec[i] = i * step_size;
    }
    return vec;
}

Paso el valor de n_steps, el cual está definido en el ámbito principal como:

    constexpr int n_step {static_cast<int>(1 / x_step) };

Obtengo el siguiente error:

    error: 'n_steps' is not a constant expression
   13 |     std::array<double, n_steps="" +="" 1=""> vec{};

He intentado colocar n_steps + 1 entre llaves, pero no ha funcionado. El propósito de n_steps, donde ocurre el error, es establecer el tamaño de la matriz, vec.

¿Cómo podría resolver este problema?</double,></double,>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Dado que n_steps no es una expresión constante, no se puede utilizar como tamaño de std::array en la función create_step_vectors. Para resolver este problema, puedes hacer que n_steps sea constexpr agregando la palabra clave constexpr a la declaración de la variable en la función principal. Por ejemplo:

    constexpr int n_steps {static_cast<int>(1 / step_size)};
    

    Esto garantiza que n_steps sea una expresión constante y se pueda utilizar para declarar el tamaño de std::array en la función create_step_vectors.

    Alternativamente, puedes utilizar un std::vector en lugar de un std::array para asignar memoria dinámicamente en tiempo de ejecución según el valor de n_steps. Por ejemplo:

    std::vector<double> vec(n_steps + 1);
    for (int i = 0; i <= n_steps; i++)
    {
        vec[i] = i * step_size;
    }
    return vec;
    

    Esto te permitirá establecer el tamaño del vector en tiempo de ejecución y evitar la necesidad de una expresión constante.

Comments are closed.