lang:cpp:variable
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
lang:cpp:variable [2020/03/05 22:37] – Déplacement de "Pointer vers une classe template depuis une classe sans template" root | lang: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: | ||
- | ===Initialisation complexe d'une variable constante=== | + | ====Déclaration des variables==== |
+ | ===Pointeur sur méthode vs std:: | ||
- | Plutôt | + | '' |
+ | |||
+ | De même, il faut préfixer par un '' | ||
<code cpp> | <code cpp> | ||
- | std::string str; | + | #include < |
- | if (i == 1) | + | |
- | | + | int main() { |
- | else if (i == 2) | + | auto funcPtr = +[] {}; |
- | | + | static_assert(std::is_same< |
- | else | + | |
- | | + | |
+ | | ||
+ | auto funcPtr3 | ||
+ | // error: static assertion failed | ||
+ | | ||
+ | } | ||
</ | </ | ||
- | écrire | + | [[https:// |
+ | |||
+ | ===Pointeur sur la méthode d'une classe=== | ||
+ | |||
+ | {{gh> | ||
+ | |||
+ | 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> | ||
- | const std::string str = [& | + | struct S5 { |
- | { | + | |
- | | + | void f(U&& |
- | | + | |
- | else if (i == 2) | + | |
- | return | + | }; |
- | | + | |
- | | + | auto ptr = static_cast< |
- | }(); // Ne pas oublier les parenthèses pour l' | + | |
</ | </ | ||
- | ===Pointeur | + | [[https:// |
+ | |||
+ | ===Pointeur | ||
<code cpp> | <code cpp> | ||
- | // La classe | + | struct Z { |
- | class Classe | + | |
- | { | + | |
- | public: | + | |
- | | + | |
- | const Classe* function(size_t i) const | + | |
- | { return this; } | + | |
- | // Ici. | + | |
- | const Classe* function2(size_t i) const | + | |
- | { return this; } | + | |
}; | }; | ||
- | int main() | + | struct A { |
- | { | + | Z* i; |
- | | + | }; |
- | const Classe* (Classe::*ptr)(size_t i) const = &Classe::function2; | + | |
- | | + | struct B { |
- | (c.*ptr)(2); | + | A a; |
+ | }; | ||
+ | |||
+ | int main() { | ||
+ | | ||
+ | auto ptr2 = &A::i; | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | int z = (b.*ptr1.*ptr2)->z; | ||
} | } | ||
</ | </ | ||
+ | |||
+ | ===Variable optionnelle=== | ||
+ | |||
+ | Création une variable '' | ||
+ | |||
+ | <code cpp> | ||
+ | std:: | ||
+ | </ | ||
+ | |||
+ | ====Programmation fonctionnelle==== | ||
+ | |||
+ | ===Initialisation complexe d'une constante=== | ||
+ | |||
+ | Plutôt que | ||
+ | |||
+ | {{gh> | ||
+ | |||
+ | écrire | ||
+ | |||
+ | {{gh> | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Bien noter que la lambda est exécutée tout de suite avec un '' | ||
+ | </ | ||
+ |
lang/cpp/variable.1583444270.txt.gz · Dernière modification : de root