Outils pour utilisateurs

Outils du site


lang:cpp:variable

Déclaration des variables

Pointeur sur la méthode d'une classe

cpp/variable/pointer_function.cpp
class Classe
{
 public:
  int function(int i) const { return i; }
};
 
int main()
{
  // The name of the variable is ptr_func.
  int (Classe::*ptr_func)(int i) const = &Classe::function;
  Classe c;
  return (c.*ptr_func)(2);
}

Exemple avec une fonction utilisant des template avec auto déduction. Dans ce cas, il faudra faire un cast pour donner le type des éléments déduits.

struct S5 {
  template <typename... T, typename... U>
  void f(U&&...) const {
    std::cout << "S5" << sizeof...(T) << "-" << sizeof...(U) << "\n";
  }
};
 
auto ptr = static_cast<void (S5::*)(int&&, char&&) const>(&S5::f<int, double, char>)

Disambiguate overloaded member function pointer being passed as template parameter Archive du 26/07/2013 le 29/05/2021

Programmation fonctionnelle

Initialisation complexe d'une constante

Plutôt que

cpp/variable/const_variable_bad.cpp
int foo(int i);
int foo(int i)
{
  int value;
  if (i == 1)
  {
    value = 1;
  }
  else if (i == 2)
  {
    value = 2;
  }
  else
  {
    value = 3;
  }
  return value;
}
int main(int argc, char* /* argv */[]) { return foo(argc); }

écrire

cpp/variable/const_variable_good.cpp
int foo(int i);
int foo(int i)
{
  const int value = [i]() {
    if (i == 1)
    {
      return 1;
    }
    if (i == 2)
    {
      return 2;
    }
    return 3;
  }();
  return value;
}
int main(int argc, char* /* argv */[]) { return foo(argc); }

Erreurs

  • non-const lvalue reference to type 'X<…>' cannot bind to a temporary of type 'X<…>'

Parfois, il n'est pas possible de faire:

int i;
int& j = i;

Il faut alors soit passer par une référence constante :

int i;
const int& j = i;

ou passer par un pointeur :

int i;
int* j = &i;

Non const lvalue references Archive du 02/09/2013 le 05/11/2021

lang/cpp/variable.txt · Dernière modification : 2021/11/05 23:23 de root