Home > Backend Development > C++ > body text

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

Susan Sarandon
Release: 2024-11-15 08:57:02
Original
535 people have browsed it

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;
}
Copy after login

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);
}
Copy after login

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)
}
Copy after login

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.

The above is the detailed content of Why Can't I Pass Non-Constexpr Arguments to a Constexpr Function?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template