lang:cpp:variable
Table des matières
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