一文看明白代码中关于常量引用作为函数的传入参数

发布时间:2023年12月26日

当在函数参数中使用常量引用时,这表示函数接受的参数是一个常量引用,即对传入的变量进行只读访问,不会修改该变量。这有助于防止意外修改传递的数据,同时可以提高性能,因为不会复制整个对象。

示例一

在这个例子中,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;
}

文章来源:https://blog.csdn.net/keke_Memory/article/details/135232803
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。