Comme vous le savez probablement, C++11 introduit l' constexpr
mot-clé.
C++11 introduit le mot-clé constexpr, qui permet à l'utilisateur de garantir qu'une fonction ou le constructeur de l'objet est au moment de la compilation constante. [...] Cela permet au compilateur de comprendre et de vérifier que [nom de la fonction] est un constante de compilation.
Ma question est de savoir pourquoi il y a des restrictions sur la forme des fonctions qui peuvent être déclarés. Je comprends le désir de garantir que la fonction est pur, mais réfléchissez à ceci:
L'utilisation de constexpr sur une fonction impose certaines restrictions sur ce que les cette fonction peut faire.
First, the function must have a non-void return type. Second, the function body cannot declare variables or define new types. Third, the body may only contain declarations, null statements and a single return statement. There must exist argument values such that, after argument substitution, the expression in the return statement produces a constant expression.
Cela signifie que cette fonction pure est illégal:
constexpr int maybeInCppC1Y(int a, int b)
{
if (a>0)
return a+b;
else
return a-b;
//can be written as return (a>0) ? (a+b):(a-b); but that isnt the point
}
Aussi, vous ne pouvez pas définir des variables locales... :( Alors je me demandais est-ce une décision de conception, ou de faire des compilateurs de le sucer quand il s'agit de prouver l'existence de la fonction un est-il pur?