当在函数参数中使用常量引用时,这表示函数接受的参数是一个常量引用,即对传入的变量进行只读访问,不会修改该变量。这有助于防止意外修改传递的数据,同时可以提高性能,因为不会复制整个对象。
在这个例子中,printVector
函数接受一个 const std::vector<int>&
类型的常量引用,函数内部可以读取但不能修改传入的 numbers
向量
#include <iostream>
#include <vector>
void printVector(const std::vector<int>& vec) {
// 使用常量引用来接受 vector,并打印其中的元素
// const 表示这个引用是常量的,也就是说,在函数中不能修改引用所指向的内容
//std::vector<int>& 表示这是一个引用,指向了一个 std::vector<int> 类型的对象
//vec 是引用的名字,在函数中用来引用传递给函数的 std::vector<int> 类型的对象。
for (const auto& elem : vec) {
// 对于容器 vec 中的每个元素,将元素赋值给 elem 这个变量,并对其进行操作
// const 关键字表示循环中的 elem 是一个常量,即不允许在循环体内修改它的值
// auto 关键字让编译器根据赋值的内容来自动确定 elem 的数据类型,以便在编译时确定其类型
std::cout << elem << " ";
}
std::cout << std::endl;
}
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// 通过常量引用将 vector 传递给函数
printVector(numbers);
return 0;
}
//这种语法在函数中用于接收参数,这样做的好处是可以避免在函数内部复制整个向量的内容,
//而是直接通过引用操作向量,从而提高效率。
//而 const 关键字则确保在函数内部不会对这个向量进行修改。
在这个例子中,modifyValue 函数接受一个整数的常量引用,并打印它的值。尝试在函数内修改传递进来的值会导致编译错误,因为在函数中,value 是一个只读的常量
void modifyValue(const int& value) {
// 这里的 value 是一个常量引用,表示我们不能在函数内修改传递进来的值
// value++;
// 上面这行会导致编译错误,因为 value 是常量引用,不能修改
// 可以使用 value,但不能改变它
std::cout << "The value is: " << value << std::endl;
}
int main() {
int number = 10;
modifyValue(number); // 将整数传递给函数 modifyValue 作为常量引用
return 0;
}
#include <iostream>
#include <string>
// 函数接受一个常量引用的字符串
void printString(const std::string& str) {
std::cout << "Received string: " << str << std::endl;
// 在这个函数中,可以使用 str,但不能修改它
// str += " (Modified)"; // 这行代码会导致编译错误
}
int main() {
std::string message = "Hello, World!";
printString(message); // 将字符串传递给函数作为常量引用
return 0;
}