Passage de paramètre par référence en c++

Je vais avoir un problème avec l'option paramètre de fonction en C++

Ce que j'essaie de faire est d'écrire de la fonction avec le paramètre optionnel qui est passé par référence, afin que je puisse l'utiliser de deux manières (1) et (2), mais sur (2) je ne m'en soucie pas vraiment quelle est la valeur de mFoobar.

J'ai essayé ce code:

void foo(double &bar, double &foobar = NULL)
{
   bar = 100;
   foobar = 150;
}

int main()
{
  double mBar(0),mFoobar(0);

  foo(mBar,mFoobar);              //(1)
  cout << mBar << mFoobar;

  mBar = 0;
  mFoobar = 0;

  foo(mBar);                     //(2)
  cout << mBar << mFoobar;

  return 0;
}

mais il bloque au

void foo(double &bar, double &foobar = NULL)

avec le message :

error: default argument for 'double& foobar' has type 'int'

Est-il possible de le résoudre sans surcharge de fonctions?

  • Bien sûr que non, même si vous pouvez passer une référence NULLE, que pensez-vous arriverait-il au sein de la fonction lorsque vous avez essayé de lui affecter une valeur ?
  • Erreur de Compilation n'est pas un accident.
  • Votre code n'est pas "s'écraser", il obtient une erreur de compilation. Une panne peut se produire après que vous avez entièrement construit votre programme et de tenter de l'exécuter.
  • double possible de la valeur par Défaut à un paramètre alors que le passage par référence en C++
  • Toute personne dans cette situation doit vraiment avaler leur fierté et préférences esthétiques et utiliser un *const pointeur. C'est une indirection, tout comme une référence, mais avec la possibilité de valeur null/testabilité. Pourquoi compliquer les choses avec des variables nominales, la dilatation de Boost, etc - quand la langue fournit une des fonctions de base qui correspond à la facture précisément pour autant que je peux dire?
InformationsquelleAutor Moomin | 2010-05-12