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 [2025/07/10 14:19] – Ajout de "Pointeur de pointeur" rootlang:cpp:variable [2025/07/28 10:36] (Version actuelle) – Précision sur l'utilisation de la lambda dans "Initialisation complexe d'une constante" root
Ligne 1: Ligne 1:
 ====Déclaration des variables==== ====Déclaration des variables====
 +===Pointeur sur méthode vs std::function===
 +
 +''std::function'' supporte les lambda avec des captures, la syntaxe C ne supporte que la capture du ''this''.
 +
 +De même, il faut préfixer par un ''+'' une lambda pour la forcer à être interprété comme un pointeur avec la syntaxe C. Nécessite uniquement si la déclaration de la variable pointeur sur fonction est de type ''auto''.
 +
 +<code cpp>
 +#include <type_traits>
 +
 +int main() {
 +  auto funcPtr = +[] {};
 +  static_assert(std::is_same<decltype(funcPtr), void (*)()>::value);
 +  void (*funcPtr2)() = [] {};
 +  static_assert(std::is_same<decltype(funcPtr2), void (*)()>::value);
 +  // funcPtr3 est un std::function.
 +  auto funcPtr3 = [] {};
 +  // error: static assertion failed
 +  static_assert(std::is_same<decltype(funcPtr3), void (*)()>::value);
 +}
 +</code>
 +
 +[[https://www.cppstories.com/2020/08/c-lambda-week-some-tricks.html/#heading|+[]()]] {{ :lang:cpp:variable:lambda_week_tricks_-_c_stories_7_28_2025_10_28_36_am_.html |Archive du 07/08/2020 le 28/07/2025}}
 +
 ===Pointeur sur la méthode d'une classe=== ===Pointeur sur la méthode d'une classe===
  
Ligne 65: Ligne 88:
 {{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/variable/const_variable_good.cpp}} {{gh>https://github.com/bansan85/wiki_le_garrec_fr/blob/master/cpp/variable/const_variable_good.cpp}}
  
-====Erreurs==== +<WRAP center round info 60%> 
- +Bien noter que la lambda est exécutée tout de suite avec un ''()'' juste après sa déclaration
-  * ''non-const lvalue reference to type 'X<...>cannot bind to a temporary of type 'X<...>%%'%%'' +</WRAP>
- +
-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 int& j = i; +
-</code> +
- +
-ou passer par un pointeur : +
- +
-<code cpp> +
-int i; +
-int* j = &i; +
-</code>+
  
-[[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.1752149950.txt.gz · Dernière modification : de root