Maison >développement back-end >C++ >Comment puis-je utiliser les valeurs par défaut avec les paramètres de passage par référence en C ?
Passer des paramètres par référence avec des valeurs par défaut en C
En C , les paramètres de fonction peuvent être transmis à la fois par valeur et par référence. Lors du passage par valeur, une copie de la valeur du paramètre est effectuée et cette copie est transmise à la fonction. Lors du passage par référence, la fonction opère directement sur l'adresse mémoire du paramètre.
Lors du passage d'un paramètre par référence, il n'est pas possible de spécifier une valeur par défaut de la même manière que pour les paramètres passés par valeur. En effet, une valeur par défaut est initialisée lorsque la fonction est définie, mais un paramètre de référence n'est initialisé que lorsque la fonction est appelée avec les arguments transmis.
Pour illustrer, considérons la déclaration de fonction suivante :
virtual const ULONG Write(ULONG &State = 0, bool sequence = true);
Ici, le paramètre "State" est déclaré comme référence à un ULONG et le paramètre "sequence" est déclaré comme booléen. Cependant, attribuer une valeur par défaut à "State" ("= 0") provoque une erreur :
error C2440: 'default argument' : cannot convert from 'const int' to 'unsigned long &' A reference that is not to 'const' cannot be bound to a non-lvalue
Cette erreur se produit car une référence non-const ne peut pas être liée à une non-lvalue (c'est-à-dire une expression temporaire). Il est cependant possible de préciser une valeur par défaut pour une référence const :
virtual const ULONG Write(const ULONG &State = 0, bool sequence = true);
Dans ce cas, le paramètre "State" est une référence const à un ULONG et la valeur par défaut ("= 0") est une valeur constante. Cela permet d'appeler la fonction sans avoir à spécifier une valeur pour "State".
Une exception à cette règle concerne l'utilisation d'une variable statique comme valeur par défaut pour une référence non const :
static int AVAL = 1; void f(int &x = AVAL) { // stuff } int main() { f(); // equivalent to f(AVAL); }
Dans cet exemple, le paramètre "x" est une référence non const à un int et la valeur par défaut ("AVAL") est une variable statique. Cela permet d'appeler la fonction sans avoir à spécifier une valeur pour "x". Cependant, cette technique a une utilité pratique limitée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!