Après avoir rejoint SO, je vois souvent ce type de syntaxe chaque fois que j'ouvre des sujets discutant des modèles. J'ai essayé de chercher sur google, mais en vain.syntaxe de modèle C++ complexe
template<typename T>
char (&f(T[1]))[1]; //what is it? what is the use of '[]' brackets and the integer in it?
template<typename T>
char (&f(...))[2]; //not this either
int main() { char c[sizeof(f<void()>(0)) == 2]; } // and this?
D'ici: SFINAE with invalid function-type or array-type parameters?
S'il vous plaît expliquer les 3 lignes où je l'ai mis des commentaires. Je veux particulièrement comprendre la syntaxe. Pouvons-nous utiliser une telle syntaxe dans les modèles uniquement?
bonne explication, merci. Si cette condition stupide crée un tableau de taille nulle, alors pourquoi avez-vous mis cette condition? –
Parce que le but est d'utiliser l'invalidité de la taille du tableau pour empêcher la compilation d'un morceau particulier de code - par exemple, une instanciation de certains modèles pour des types particuliers qui doivent être gérés spécialement. –
@Pointer: c'est un concept connu sous le nom de "compile time assert". Le "normal" 'assert()' vérifie une condition booléenne à l'exécution. Avec cette méthode, vous pouvez vérifier une condition booléenne au moment de la compilation. Par exemple, 'char c [CHAR_BIT == 8]' rend explicite que votre programme ne peut pas gérer les compilateurs qui ont 'CHAR_BIT == 9' – MSalters