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