Outils pour utilisateurs

Outils du site


lang:cpp:variable

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
lang:cpp:variable [2019/07/25 15:03] – Ajout de "Connaître le type d'une variable auto à la compilation" rootlang:cpp:variable [2025/02/06 10:12] (Version actuelle) – Ajout de "Variable optionnelle" root
Ligne 1: Ligne 1:
 +====Déclaration des variables====
 ===Pointeur sur la méthode d'une classe=== ===Pointeur sur la méthode d'une classe===
 +
 +{{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/variable/pointer_function.cpp}}
 +
 +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.
 +
 <code cpp> <code cpp>
-// La classe +struct S5 
-class Classe +  template <typename... T, typename... U> 
-{ +  void f(U&&...) const { 
-public: +    std::cout << "S5" << sizeof...(T<< "-" << sizeof...(U) << "\n"; 
-  // Pas ici+  }
-  const Classe* function(size_t i) const +
-  return this; } +
-  // Ici. +
-  const Classe* function2(size_t iconst +
-  { return this; }+
 }; };
  
-int main() +auto ptr = static_cast<void (S5::*)(int&&, char&&) const>(&S5::f<int, double, char>)
-+
-  // Le pointeur de nom ptr+
-  const Classe* (Classe::*ptr)(size_t i) const &Classe::function2; +
-  Classe C; +
-  (C.*ptr)(2)+
-}+
 </code> </code>
  
-====auto==== +[[https://stackoverflow.com/questions/17874489/disambiguate-overloaded-member-function-pointer-being-passed-as-template-paramet|Disambiguate overloaded member function pointer being passed as template parameter]] {{ :lang:cpp:variable:c_-_disambiguate_overloaded_member_function_pointer_being_passed_as_template_parameter_-_stack_overflow_2021-05-29_08_00_38_.html |Archive du 26/07/2013 le 29/05/2021}}
-===Connaître le type d'une variable auto à la compilation=== +
-Cela se fait en lisant le message d'erreur à la compilation.+
  
-<code> +===Variable optionnelle===
-template<class Type> struct S;+
  
-int main() { +Création une variable ''field'' de type ''void*'' si ''T'' est de type ''int''
-   auto x = ...; + 
-   S<decltype(x)>(); +<code cpp
-}+std::conditional_t<std::is_integral_v<T>, int, void*> field;
 </code> </code>
  
-Message d'erreur possible (le type est le template de la structure S) +====Programmation fonctionnelle==== 
-  utilisation du type non défini 'S<const std::list<unsigned char> &>'+ 
 +===Initialisation complexe d'une constante=== 
 + 
 +Plutôt que 
 + 
 +{{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/variable/const_variable_bad.cpp}} 
 + 
 +écrire 
 + 
 +{{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/variable/const_variable_good.cpp}} 
 + 
 +====Erreurs==== 
 + 
 +  * ''non-const lvalue reference to type 'X<...>' cannot bind to a temporary of type 'X<...>%%'%%'' 
 + 
 +Parfois, il n'est pas possible de faire: 
 + 
 +<code cpp> 
 +int i; 
 +int& j = i; 
 +</code> 
 + 
 +Il faut alors soit passer par une référence constante : 
 + 
 +<code cpp> 
 +int i; 
 +const intj = i; 
 +</code> 
 + 
 +ou passer par un pointeur : 
 + 
 +<code cpp> 
 +int i; 
 +int* j = &i; 
 +</code>
  
-[[https://stackoverflow.com/questions/24441505/retrieving-the-type-of-auto-in-c11-without-executing-the-program|Retrieving the type of auto in C++11 without executing the program]] {{ :lang:cpp:variable:c_-_retrieving_the_type_of_auto_in_c_11_without_executing_the_program_-_stack_overflow_2019-07-25_13_11_59_.html |Archive du 25/07/2019}}+[[https://stackoverflow.com/questions/18565167/non-const-lvalue-references|Non const lvalue references]] {{ :lang:cpp:variable:c_-_non_const_lvalue_references_-_stack_overflow_2021-11-05_23_19_03_.html |Archive du 02/09/2013 le 05/11/2021}}
lang/cpp/variable.1564059780.txt.gz · Dernière modification : 2019/07/25 15:03 de root