prog:cpp:propagate_const
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| prog:cpp:propagate_const [2025/07/06 17:41] – Création avec propagate_const root | prog:cpp:propagate_const [2025/07/06 19:06] (Version actuelle) – Fix value_types root | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | =====propagate_const===== | + | =====Problématique de base====== |
| - | + | ||
| - | ====Présentation==== | + | |
| Soit une classe Y qui possède un membre de type classe X. L' | Soit une classe Y qui possède un membre de type classe X. L' | ||
| Ligne 30: | Ligne 28: | ||
| </ | </ | ||
| - | ====Sans propagate_const avec objet==== | + | ====Objet==== |
| <code cpp> | <code cpp> | ||
| Ligne 62: | Ligne 60: | ||
| </ | </ | ||
| - | ====Sans propagate_const avec pointeur==== | + | ====Pointeur==== |
| <code cpp> | <code cpp> | ||
| Ligne 92: | Ligne 90: | ||
| </ | </ | ||
| - | ====Sans propagate_const avec référence==== | + | ====Référence==== |
| <code cpp> | <code cpp> | ||
| Ligne 123: | Ligne 121: | ||
| </ | </ | ||
| - | ====Avec propagate_const | + | =====propagate_const===== |
| + | |||
| + | ====Pointeur==== | ||
| Fonctionne avec '' | Fonctionne avec '' | ||
| <code cpp> | <code cpp> | ||
| + | #include < | ||
| + | |||
| struct Y { | struct Y { | ||
| Y() : m_ptrX(new X()) {}; | Y() : m_ptrX(new X()) {}; | ||
| Ligne 154: | Ligne 156: | ||
| </ | </ | ||
| - | ====Sans propagate_const avec référence==== | + | ====Référence==== |
| Impossible. | Impossible. | ||
| + | =====indirect_value===== | ||
| + | '' | ||
| + | |||
| + | ====Pointeur==== | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | |||
| + | struct Y { | ||
| + | Y() : m_ptrX(isocpp_p1950:: | ||
| + | |||
| + | void f() const { | ||
| + | std::cout << "f (const)\n"; | ||
| + | m_ptrX-> | ||
| + | } | ||
| + | |||
| + | void f() { | ||
| + | std::cout << "f (non-const)\n"; | ||
| + | m_ptrX-> | ||
| + | } | ||
| + | |||
| + | isocpp_p1950:: | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | Rendu : | ||
| + | |||
| + | < | ||
| + | f (non-const) | ||
| + | g (non-const) | ||
| + | f (const) | ||
| + | g (const) | ||
| + | </ | ||
| + | |||
| + | =====value_types===== | ||
| + | |||
| + | ====Référence==== | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | |||
| + | struct Y { | ||
| + | Y() : m_ptrX(m_X) {}; | ||
| + | |||
| + | void f() const { | ||
| + | std::cout << "f (const)\n"; | ||
| + | m_ptrX-> | ||
| + | } | ||
| + | |||
| + | void f() { | ||
| + | std::cout << "f (non-const)\n"; | ||
| + | m_ptrX-> | ||
| + | } | ||
| + | |||
| + | xyz:: | ||
| + | X m_X; | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | Rendu : | ||
| + | |||
| + | < | ||
| + | f (non-const) | ||
| + | g (non-const) | ||
| + | f (const) | ||
| + | g (const) | ||
| + | </ | ||
| + | |||
| + | ====Pointeur / allocation dynamique==== | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | |||
| + | struct Y | ||
| + | { | ||
| + | Y() : m_ptrX(xyz:: | ||
| + | |||
| + | void f() const { | ||
| + | std::cout << "f (const)\n"; | ||
| + | m_ptrX-> | ||
| + | } | ||
| + | |||
| + | void f() { | ||
| + | std::cout << "f (non-const)\n"; | ||
| + | m_ptrX-> | ||
| + | } | ||
| + | |||
| + | xyz:: | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | Rendu : | ||
| + | |||
| + | < | ||
| + | f (non-const) | ||
| + | g (non-const) | ||
| + | f (const) | ||
| + | g (const) | ||
| + | </ | ||
prog/cpp/propagate_const.1751816484.txt.gz · Dernière modification : de root
