Heim > Backend-Entwicklung > C++ > Hauptteil

Warum kann ich keine Nicht-Constexpr-Argumente an eine Constexpr-Funktion übergeben?

Susan Sarandon
Freigeben: 2024-11-15 08:57:02
Original
534 Leute haben es durchsucht

Why Can't I Pass Non-Constexpr Arguments to a Constexpr Function?

Limitations of Constexpr Function Parameters in Constant Expressions

Consider the code snippet:

static constexpr int make_const(const int i){
    return i;
}

void t1(const int i)
{
    constexpr int ii = make_const(i);  // error occurs here (i is not a constant expression)
    std::cout<<ii;
}
Nach dem Login kopieren

Error Details

The code triggers an error when attempting to initialize ii with make_const(i) because i is not a constant expression. This is because:

  • A constexpr variable is a variable with a value guaranteed to be available at compile time.
  • A constexpr function is a function that evaluates at compile time when provided with constexpr arguments.

Passing a non-constexpr parameter to a constexpr function does not result in a constexpr output. However, the constexpr function can inherit and propagate the constexprness of its input parameters.

Allowed Scenarios

The following code works because both t1() and make_const() are constexpr functions with constexpr parameters:

constexpr int t1(const int i)
{
    return make_const(i);
}
Nach dem Login kopieren

Limitations

The following code fails because do_something() is not a constexpr function, even though make_const() is:

template<int i>
constexpr bool do_something(){
    return i;
}

constexpr int t1(const int i)
{
    return do_something<make_const(i)>();   // error occurs here (i is not a constant expression)
}
Nach dem Login kopieren

Conclusion

Understanding the distinction between constexpr functions and variables is crucial to avoid such errors. Constexpr functions offer the flexibility of being evaluated at both compile-time and run-time, but only with constexpr arguments.

Das obige ist der detaillierte Inhalt vonWarum kann ich keine Nicht-Constexpr-Argumente an eine Constexpr-Funktion übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage