结尾
正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。
以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
- 可以在函数内部统一对待传递的对象,使函数接口更加一致
引用可以提高代码的效率、可读性。
为什么是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)]