2024年前端最新<c++基础(3)>爱用值传递的不是好的c++程序员,2024年最新字节跳动面试官常问的问题

结尾

正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。

以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

前端学习书籍导图-1

  • 可以在函数内部统一对待传递的对象,使函数接口更加一致

引用可以提高代码的效率、可读性。

为什么是const

因为我们不希望原始变量被改变,尤其是程序很复杂的时候,如果不知道自己的变量在哪里被改变,那会是一场灾难。const能够让程序变得安全、健壮。

示例

说一万句不如show code,用一个例子说明const引用的必要性

#include <iostream>
#include <string>
#include <vector>

class SubClass {//细节不用看,理解为一个复杂类
public:
    SubClass(int value) : value\_(value) {
        std::cout << "Creating SubClass with value: " << value_ << std::endl;
    }

    ~SubClass() {
        std::cout << "Destroying SubClass with value: " << value_ << std::endl;
    }

    // 假设这个类有一些复杂的成员函数和数据操作
    void performSubOperation() const {
        std::cout << "Performing sub operation with value: " << value_ << std::endl;
    }

private:
    int value_;
};

class DynamicArray {//细节不用看,理解为一个复杂类
public:
    DynamicArray(size_t size) : size\_(size), data\_(new int[size]) {
        std::cout << "Creating DynamicArray with size: " << size_ << std::endl;
    }

    ~DynamicArray() {
        delete[] data_;
        std::cout << "Destroying DynamicArray with size: " << size_ << std::endl;
    }

    // 假设这个类有一些复杂的成员函数和数据操作
    void fillData() {
        for (size_t i = 0; i < size_; ++i) {
            data_[i] = static\_cast<int>(i);
        }
    }

    void printData() const {
        for (size_t i = 0; i < size_; ++i) {
            std::cout << data_[i] << " ";
        }
        std::cout << std::endl;
    }

private:
    size_t size_;
    int\* data_;
};

class ComplexClass {//细节不用看,理解为一个包含多个复杂类作为成员的复杂类
public:
    ComplexClass(const std::string& data, int subValue, size_t arraySize)
        : data\_(data), subObject\_(subValue), dynamicArray\_(arraySize) {
        std::cout << "Creating ComplexClass with data: " << data_ << std::endl;
    }

    ~ComplexClass() {
        std::cout << "Destroying ComplexClass with data: " << data_ << std::endl;
    }

    // 假设这个类有一些复杂的成员函数和数据操作
    void performComplexOperation() const {
        std::cout << "Performing complex operation with data: " << data_ << std::endl;
        subObject_.performSubOperation();
        dynamicArray_.printData();
    }

private:
    std::string data_;
    SubClass subObject_;
    DynamicArray dynamicArray_;
};

// 使用值传递的版本
void processComplexClassValue(ComplexClass obj) {
    std::cout << "Processing ComplexClass by value..." << std::endl;
    obj.performComplexOperation();
}

// 使用const引用的版本
void processComplexClassReference(const ComplexClass& obj) {
    std::cout << "Processing ComplexClass by reference..." << std::endl;
    obj.performComplexOperation();
}

int main() {
    // 创建一个复杂对象
    ComplexClass complexObject("Hello, Const Reference!", 42, 5);

    // 循环调用两个版本的函数,观察构造和析构函数的调用情况
    for (int i = 0; i < 3; ++i) {
        std::cout << "\nIteration " << i + 1 << ":\n";

        // 使用值传递的版本
        std::cout << "Calling processComplexClassValue...\n";
        processComplexClassValue(complexObject);

        // 使用const引用的版本
        std::cout << "Calling processComplexClassReference...\n";


### 最后

**前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档**

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

![](https://img-blog.csdnimg.cn/img_convert/c8faf900cd08a17d7c976dee99c13fee.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/1c44ad3fc8cf22312d2dedd137355cd2.webp?x-oss-process=image/format,png)



bs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

[外链图片转存中...(img-o1sslGcM-1715628427970)]

[外链图片转存中...(img-zLikmmW4-1715628427970)]



  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值