Const references let a function read an existing object without copying or modifying it.

const reference A const reference parameter can bind to an existing object while promising not to change it.
read-only parameter Read-only parameters are useful for strings and containers that should not be copied just to inspect them.

Const Reference Params

label
const_reference_params.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <string>

int label_size(const std::string& label) {
    return static_cast<int>(label.size());
}

int main() {
    std::string label = "trace";

    int size = label_size(label);

    std::cout << "label=" << label << std::endl;
    std::cout << "size=" << size << std::endl;
    return 0;
}
#include <iostream>
#include <string>

int label_size(const std::string& label) {
    return static_cast<int>(label.size());
}

int main() {
    std::string label = "cpp";

    int size = label_size(label);

    std::cout << "label=" << label << std::endl;
    std::cout << "size=" << size << std::endl;
    return 0;
}
#include <iostream>
#include <string>

int label_size(const std::string& label) {
    return static_cast<int>(label.size());
}

int main() {
    std::string label = "reference";

    int size = label_size(label);

    std::cout << "label=" << label << std::endl;
    std::cout << "size=" << size << std::endl;
    return 0;
}
  1. label ← trace

    8int main() {9    std::string label→ trace = "trace"; //@label="cpp", "reference"1011    int size = label_size(labeltrace);
  2. int label_size(const std::string& label)

    4int label_size(const std::string& labeltrace) {5    return static_cast<int>(labeltrace.size());6}
  3. size ← 5

    11    int size→ 5 = label_size(labeltrace);1213    std::cout << "label=" << labeltrace << std::endl;14    std::cout << "size=" << size5 << std::endl;15    return 0;16}
    outputlabel=trace
    size=5
  1. label ← cpp

    8int main() {9    std::string label→ cpp = "cpp";1011    int size = label_size(labelcpp);
  2. int label_size(const std::string& label)

    4int label_size(const std::string& labelcpp) {5    return static_cast<int>(labelcpp.size());6}
  3. size ← 3

    11    int size→ 3 = label_size(labelcpp);1213    std::cout << "label=" << labelcpp << std::endl;14    std::cout << "size=" << size3 << std::endl;15    return 0;16}
    outputlabel=cpp
    size=3
  1. label ← reference

    8int main() {9    std::string label→ reference = "reference";1011    int size = label_size(labelreference);
  2. int label_size(const std::string& label)

    4int label_size(const std::string& labelreference) {5    return static_cast<int>(labelreference.size());6}
  3. size ← 9

    11    int size→ 9 = label_size(labelreference);1213    std::cout << "label=" << labelreference << std::endl;14    std::cout << "size=" << size9 << std::endl;15    return 0;16}
    outputlabel=reference
    size=9