Value Categories and References
Const Reference Params
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
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;
}
label ← trace
8int main() {9 std::string label→ trace = "trace"; //@label="cpp", "reference"1011 int size = label_size(labeltrace);int label_size(const std::string& label)
4int label_size(const std::string& labeltrace) {5 return static_cast<int>(labeltrace.size());6}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
label ← cpp
8int main() {9 std::string label→ cpp = "cpp";1011 int size = label_size(labelcpp);int label_size(const std::string& label)
4int label_size(const std::string& labelcpp) {5 return static_cast<int>(labelcpp.size());6}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
label ← reference
8int main() {9 std::string label→ reference = "reference";1011 int size = label_size(labelreference);int label_size(const std::string& label)
4int label_size(const std::string& labelreference) {5 return static_cast<int>(labelreference.size());6}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