// Las formas de const con punteros y referencias. Se leen de derecha a izquierda.
#include <cstddef>
#include <iostream>
#include <string>

std::size_t count_letter(const std::string& text, char letter) {
    std::size_t found = 0;
    for (char c : text) {
        if (c == letter) {
            found++;
        }
    }
    return found;
}

int main() {
    int a = 1;
    int b = 2;
    const int *to_const = &a;    // no se puede escribir *to_const
    to_const = &b;               // sí se puede cambiar el puntero
    int *const fixed = &a;       // no se puede cambiar el puntero
    *fixed = 5;                  // sí se puede escribir a través de él
    const int& view = a;         // no se puede escribir a través de view
    a = 7;                       // a sí cambia, y view lo ve
    std::cout << *to_const << " " << *fixed << " " << view << "\n";

    // Una literal crea una std::string temporal; const& se puede atar a ella.
    std::cout << count_letter("banana", 'a') << "\n";
    return 0;
}
