建设好党建网站的重要性/网络热词缩写

建设好党建网站的重要性,网络热词缩写,龙口网页设计,企业网站功能列表目录 一、函数基础 1.1 函数定义与声明 1.2 函数调用 1.3 引用参数 二、函数重载:同名函数的「多态魔法」(C 特有) 2.1 基础实现 2.2 重载决议流程图 2.3 与 C 语言的本质区别 2.4 实战陷阱 三、默认参数:接口的「弹性设…

目录

一、函数基础

1.1 函数定义与声明

1.2 函数调用

1.3 引用参数

二、函数重载:同名函数的「多态魔法」(C++ 特有)

2.1 基础实现

2.2 重载决议流程图

2.3 与 C 语言的本质区别

2.4 实战陷阱

三、默认参数:接口的「弹性设计」(C++ 特有)

3.1 语法规则

3.2 C 语言替代方案(笨拙且易错)

四、内联函数:性能与代码的「平衡艺术」

4.1 C++ vs C 的内联差异

4.2 现代 C++ 实践(C++17)

4.3. 内联函数示例

4.4 注意事项

五、constexpr 函数:编译期计算的「常量革命」(C++11+)

5.1 基础用法

5.2 与 C 宏的本质区别

5.3 实战案例:编译期斐波那契数列 

六、lambda 表达式:匿名函数的「编程解放」(C++11+)

6.1 基础语法

6.2 捕获方式对比

6.3 与 C 函数指针的对比

6.4 Lambda表达式示例 

七、函数模板:泛型编程的「基石」

7.1 基础实现

7.2 模板特化(Partial Specialization)

八、成员函数:类的「行为封装」(C++ 特有)

8.1 成员函数分类

8.2 虚函数:多态的核心 

8.3 const 成员函数:数据安全的保障

九、异常规范:错误处理的「契约式设计」

9.1 现代 C++ 实践(noexcept)

9.2 与 C 语言的对比

十、尾随返回类型:类型推导的「语法革命」(C++11+)

10.1 基础用法

 10.2 复杂类型示例

十一、初始化捕获:lambda 的「状态封装」(C++14+)

11.1 语法创新

11.2 与 C 语言的对比

十二、友元函数:打破封装的「双刃剑」(C++ 特有)

12.1 基础用法

12.2 友元模板

十三、函数指针进化:从过程到对象的「寻址革命」

13.1 成员函数指针

13.2 与 C 语言函数指针的对比

十四、C++20 新特性:函数的「终极进化」

14.1 协同函数(Coroutine)

十五、最佳实践与性能优化

15.1 重载决议优化

15.2 lambda 性能优化

15.3 成员函数设计原则

十六、总结:C++ 函数的「编程范式跃迁」

十七、参考资料


C 语言的函数是面向过程的「子程序」,而 C++ 的函数是面向对象和泛型编程的「一等公民」。本文将通过12 个核心特性,通过与C语言的对比分析,重点讲解C++在函数设计上的改进与创新。

一、函数基础

在C和C++中,函数都是实现代码复用的重要手段。函数允许将一段代码封装起来,通过函数名进行调用,从而提高代码的可读性和可维护性。

1.1 函数定义与声明

在C语言中,函数的定义和声明通常如下所示:

// 函数声明
int add(int a, int b);// 函数定义
int add(int a, int b) {return a + b;
}

在C++中,函数的定义和声明与C语言非常相似,但C++允许函数具有更复杂的类型系统,例如返回类型和参数类型可以是用户自定义的类型。

#include <iostream>// 用户自定义类型:二维点
struct Point {int x;int y;// 成员函数示例void print() {std::cout << "(" << x << ", " << y << ")\n";}
};// 函数声明(参数和返回类型均为自定义类型)
Point addPoints(const Point& a, const Point& b);int main() {// 创建自定义类型对象Point p1 = {1, 2};Point p2 = {3, 4};// 调用自定义类型参数的函数Point result = addPoints(p1, p2);// 使用自定义类型的成员函数result.print();  // 输出:(4, 6)return 0;
}// 函数定义(实现细节)
Point addPoints(const Point& a, const Point& b) {Point sum;sum.x = a.x + b.x;sum.y = a.y + b.y;return sum;
}

1.2 函数调用

函数调用在C和C++中都是相同的,通过函数名和参数列表来调用函数。

// C语言中的函数调用
int result = add(3, 4);
// C++中的函数调用
int result = add(3, 4);

1.3 引用参数

C++引入引用类型作为更安全的指针替代方案:

#include <iostream>void swap(int& a, int& b) {int temp = a;a = b;b = temp;
}int main() {int x = 10, y = 20;std::cout << "Before: x=" << x << ", y=" << y << std::endl;swap(x, y);std::cout << "After:  x=" << x << ", y=" << y << std::endl;return 0;
}

引用 vs 指针:

特性引用指针
空值不能为NULL可以为NULL
重定义不可可以
地址操作自动解引用显式操作
语法简洁性

二、函数重载:同名函数的「多态魔法」(C++ 特有)

函数重载是C++相对于C语言的一个重要特性。它允许在同一作用域内定义多个同名函数,但这些函数的参数类型或参数个数必须不同。编译器会根据函数调用时提供的参数类型和个数来确定调用哪个函数。

2.1 基础实现

#include <iostream>// C++支持重载,C语言禁止
void print(int x) { std::cout << "int: " << x << '\n'; }
void print(double x) { std::cout << "double: " << x << '\n'; }
void print(const char* s) { std::cout << "string: " << s << '\n'; }int main() {print(42);       // int: 42print(3.14);     // double: 3.14print("Hello");  // string: Hello
}

2.2 重载决议流程图

2.3 与 C 语言的本质区别

特性C++C 语言
同名函数支持(参数列表不同)禁止(链接错误)
编译机制名称改编(Name Mangling)直接使用函数名
错误检查编译期类型安全检查仅检查参数数量(弱类型)

2.4 实战陷阱

void f(int x, int y = 0); // 声明带默认参数
void f(int x, int y);    // 定义不带默认参数(C++允许,但调用时按声明处理)

三、默认参数:接口的「弹性设计」(C++ 特有)

C++允许在函数定义或声明时为参数指定默认值。当调用函数时,如果未提供具有默认值的参数,则使用默认值。

3.1 语法规则

#include <iostream>
using namespace std;// 定义函数,为参数b和c指定默认值
int add(int a, int b = 5, int c = 10) {return a + b + c;
}int main() {cout << "add(3) = " << add(3) << endl;       // 使用默认值:b=5, c=10cout << "add(3, 7) = " << add(3, 7) << endl;  // 使用默认值:c=10cout << "add(3, 7, 2) = " << add(3, 7, 2) << endl; // 不使用默认值return 0;
}

 

注意事项:

  • 默认参数只能在函数声明或定义时指定一次:不能在函数声明和定义时分别为同一个参数指定默认值。

  • 默认参数应从右往左连续指定:如果为某个参数指定了默认值,则它右边的所有参数也必须具有默认值。

3.2 C 语言替代方案(笨拙且易错)

// C语言通过宏模拟默认参数
#define SET_CONFIG(port, host) set_config((port) ? (port) : 8080, (host) ? (host) : "localhost")
void set_config(int port, const char* host); // 无默认参数

四、内联函数:性能与代码的「平衡艺术」

内联函数是C++中用于提高函数调用效率的一种机制。通过将函数体在调用点展开(内联展开),可以减少函数调用的开销(如栈帧的创建和销毁、参数传递等)。

4.1 C++ vs C 的内联差异

特性C++C 语言(C99+)
关键字inlinestatic inline(文件作用域)
链接属性可跨文件(需同名定义)静态(文件内)
编译器控制建议性(可能被忽略)强制展开(函数体必须简单)

4.2 现代 C++ 实践(C++17)

// 强制内联(GCC/Clang扩展)
[[gnu::always_inline]] 
void fast_math(float& x) { x *= 1.618f; } // 高频调用的数学函数

4.3. 内联函数示例

#include <iostream>
using namespace std;// 使用inline关键字声明内联函数
inline int max(int a, int b) {return (a > b) ? a : b;
}int main() {cout << "max(3, 4) = " << max(3, 4) << endl;return 0;
}

inline关键字只是向编译器提出一个请求,编译器可以选择忽略这个请求。因此,即使使用了inline关键字,也不能保证函数一定会被内联展开。

4.4 注意事项

  • 内联函数通常适用于短小且频繁调用的函数:对于大型或复杂的函数,内联展开可能会增加代码体积并降低性能。

  • 内联函数在类定义中自动成为内联函数:在类定义中定义的成员函数(包括成员函数声明和定义)自动成为内联函数,无需使用inline关键字。

  • 编译器可能会对内联函数进行优化:即使函数被内联展开,编译器也可能会对生成的代码进行优化以提高性能。

、constexpr 函数:编译期计算的「常量革命」(C++11+)

5.1 基础用法

constexpr int square(int x) { return x * x; } // 编译期计算
constexpr auto arr = {square(2), square(3)}; // 编译期初始化数组

5.2 与 C 宏的本质区别

特性constexpr 函数C 宏
类型安全严格类型检查无类型(可能导致副作用)
调试信息保留函数名和行号宏展开后难以追踪
递归支持支持编译期递归不支持

5.3 实战案例:编译期斐波那契数列 

constexpr int fib(int n) {return n <= 1 ? n : fib(n-1) + fib(n-2); // 编译期计算
}
constexpr int fib_42 = fib(42); // 编译期完成计算

六、lambda 表达式:匿名函数的「编程解放」(C++11+)

C++11引入了Lambda表达式,允许在代码中定义匿名函数对象。Lambda表达式提供了一种简洁而强大的方式来定义和使用短小的函数对象。

6.1 基础语法

// [捕获列表](参数列表) mutable? exception? -> 返回类型 { 函数体 }
auto add = [](int a, int b) { return a + b; };
std::cout << add(3, 5); // 8

6.2 捕获方式对比

捕获方式说明示例
空捕获不捕获任何变量[]{}
值捕获拷贝变量值(默认 const)[x]{ return x*2; }
引用捕获引用变量(需确保生命周期)[&y]{ y++; }
混合捕获部分值 / 部分引用[x, &y]{ return x + y; }
初始化捕获C++14,任意表达式初始化[a=1, b=std::move(vec)]{}

6.3 与 C 函数指针的对比

// C语言:通过函数指针实现回调
void (*callback)(int);
callback = &handle_event;// C++:lambda直接捕获上下文
std::vector<int> data = {1,2,3};
std::for_each(data.begin(), data.end(), [&](int x) {std::cout << x * data.size(); // 直接捕获data
});

6.4 Lambda表达式示例 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {vector<int> vec = {1, 2, 3, 4, 5};// 使用Lambda表达式对vector中的元素进行排序(降序)sort(vec.begin(), vec.end(), [](int a, int b) {return a > b;});// 输出排序后的vectorfor (int n : vec) {cout << n << " ";}cout << endl;return 0;
}

七、函数模板:泛型编程的「基石」

7.1 基础实现

template <typename T>
T max(T a, T b) { return a > b ? a : b; }int main() {std::cout << max(5, 3);    // intstd::cout << max(3.14, 2.71); // double
}

7.2 模板特化(Partial Specialization)

// 特化指针版本
template <typename T>
T* max(T* a, T* b) { return *a > *b ? a : b; }// 特化字符串版本
template <>
const char* max(const char* a, const char* b) {return std::strcmp(a, b) > 0 ? a : b;
}

八、成员函数:类的「行为封装」(C++ 特有)

8.1 成员函数分类

8.2 虚函数:多态的核心 

class Shape {
public:virtual double area() const = 0; // 纯虚函数
};class Circle : public Shape {
public:double area() const override { return M_PI * r * r; }
};

8.3 const 成员函数:数据安全的保障

class Data {
private:int value;
public:int get() const { return value; } // 保证不修改成员void set(int v) { value = v; }
};

九、异常规范:错误处理的「契约式设计」

9.1 现代 C++ 实践(noexcept)

// 声明不抛异常(C++11)
void critical_operation() noexcept {// 若抛出异常,调用std::terminate()
}// 有条件不抛异常
void safe_operation() noexcept(std::is_integral_v<Param>) {// 仅当Param为整数类型时不抛异常
}

9.2 与 C 语言的对比

特性C++C 语言
错误处理异常机制(try/catch/throw)返回错误码或全局错误变量(errno)
错误传播栈展开(Stack Unwinding)依赖函数调用链检查返回值
性能无异常时零开销始终检查返回值(潜在性能损失)

十、尾随返回类型:类型推导的「语法革命」(C++11+)

10.1 基础用法

// 传统写法(需前置声明)
template <typename T, typename U>
auto add(T t, U u) -> decltype(t + u) {return t + u;
}// C++14简化(自动推导)
template <typename T, typename U>
auto add(T t, U u) {return t + u;
}

 10.2 复杂类型示例

// 返回指向成员函数的指针
auto get_fun() -> int (Data::*)() const {return &Data::get;
}

十一、初始化捕获:lambda 的「状态封装」(C++14+)

11.1 语法创新

int base = 10;
auto adder = [a = base + 10](int x) { return a + x; };
std::cout << adder(5); // 25(a=20)

11.2 与 C 语言的对比

// C语言需手动封装状态
typedef struct { int base; } Adder;
int add(Adder* self, int x) { return self->base + x; }
Adder adder = { .base = 20 };
add(&adder, 5); // 25(需显式传递状态)

十二、友元函数:打破封装的「双刃剑」(C++ 特有)

12.1 基础用法

class Data {friend void print(const Data& d); // 友元声明
private:int value;
};void print(const Data& d) { // 访问私有成员std::cout << "Value: " << d.value << '\n';
}

12.2 友元模板

template <typename T>
class Container {friend T; // 授予整个类友元权限friend void debug(Container<T>& c); // 授予特定函数权限
};

十三、函数指针进化:从过程到对象的「寻址革命」

13.1 成员函数指针

class Data {
public:void print() const { std::cout << value << '\n'; }int value;
};int main() {Data d{42};void (Data::*mem_fn)() const = &Data::print;(d.*mem_fn)(); // 42(调用成员函数)
}

13.2 与 C 语言函数指针的对比

特性C++ 成员函数指针C 语言函数指针
绑定对象必须关联类对象独立于数据(面向过程)
语法&Class::member&function
调用方式obj.*mem_fn() 或 ptr->*mem_fn()fn()

十四、C++20 新特性:函数的「终极进化」

14.1 协同函数(Coroutine)

#include <coroutine>struct Generator {struct promise_type {int current_value = 0;Generator get_return_object() { return Generator{this}; }std::suspend_always yield_value(int value) {current_value = value;return {};}std::suspend_void return_void() { return {}; }};// ... 其他实现 ...
};Generator countdown(int n) {for (; n >= 0; --n) co_yield n;
}// 使用协同函数
for (int x : countdown(5)) {std::cout << x << ' '; // 5 4 3 2 1 0
}

十五、最佳实践与性能优化

15.1 重载决议优化

// 优先匹配非模板函数
void print(int x) { /* 特化实现 */ }
template <typename T> void print(T x) { /* 通用实现 */ }

15.2 lambda 性能优化

// 避免不必要的捕获
auto processor = [=](int x) mutable noexcept { /* 无堆分配的轻量级lambda */ };

15.3 成员函数设计原则

class Resource {
public:void use() const noexcept { /* 无修改的常量成员 */ }~Resource() = default; // 遵循Rule of Zero
};

十六、总结:C++ 函数的「编程范式跃迁」

特性C 语言C++价值定位
函数重载不支持支持(编译期多态)接口统一化
默认参数不支持支持(接口弹性)减少重复代码
lambda 表达式不支持支持(匿名函数 + 状态捕获)函数式编程支持
成员函数结构体 + 函数指针模拟原生支持(封装 / 继承 / 多态)面向对象基础
函数模板不支持支持(泛型编程)类型安全的代码复用
constexpr不支持支持(编译期计算)性能与安全性的双重提升

编程哲学:C++ 函数不仅是代码块,更是类型系统的延伸抽象机制的载体运行时与编译时的桥梁。掌握这些特性,方能驾驭现代 C++ 的三大范式(面向对象、泛型、函数式)。

十七、参考资料

  •  《C++ Primer(第 5 版)》这本书是 C++ 领域的经典之作,对 C++ 的基础语法和高级特性都有深入讲解。
  • 《Effective C++(第 3 版)》书中包含了很多 C++ 编程的实用建议和最佳实践。
  • 《C++ Templates: The Complete Guide(第 2 版)》该书聚焦于 C++ 模板编程,而using声明在模板编程中有着重要应用,如定义模板类型别名等。
  • C++ 官方标准文档:C++ 标准文档是最权威的参考资料,可以查阅最新的 C++ 标准(如 C++11、C++14、C++17、C++20 等)文档。例如,ISO/IEC 14882:2020 是 C++20 标准的文档,可从相关渠道获取其详细内容。
  • cppreference.com:这是一个非常全面的 C++ 在线参考网站,提供了详细的 C++ 语言和标准库文档。
  • LearnCpp.com:该网站提供了系统的 C++ 教程,配有丰富的示例代码和清晰的解释,适合初学者学习和理解相关知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙UI开发

鸿蒙UI开发 本文旨在分享一些鸿蒙UI布局开发上的一些建议&#xff0c;特别是对屏幕宽高比发生变化时的应对思路和好的实践。 折叠屏适配 一般情况&#xff08;自适应布局/响应式布局&#xff09; 1.自适应布局 1.1自适应拉伸 左右组件定宽 TypeScript //左右定宽 Row() { …

基于EFISH-SBC-RK3576的无人机智能飞控与数据存储方案

一、方案背景 民用无人机在电力巡检、农业植保、应急救援等领域快速普及&#xff0c;但传统方案面临‌多协议设备兼容性差‌、‌野外环境数据易丢失‌、‌复杂电磁干扰‌三大痛点。 电鱼智能推出‌EFISH-SBC-RK3576‌&#xff0c;可集成双冗余总线接口与工业级加固存储&#x…

数据库----单表、多表

数据库 create database 数据库名称;---创建数据库create database 数据库名称 default charsetutf8mb4;---创建数据库&#xff0c;同时指定编码show databases;---查看当前数据库管理下存在多少数据库show databases like "db_%";---查询以db_开头的数据库select d…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分页表格拖拽排序

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

谷歌推出Gemini实时AI视频功能,开启智能交互新体验

3月24日&#xff0c;谷歌发言人亚历克斯约瑟夫向媒体证实&#xff0c;谷歌已开始向 Gemini Live 推出新的人工智能功能。这些功能使 Gemini 能够“看到”用户的屏幕内容&#xff0c;或通过智能手机摄像头获取画面&#xff0c;并实时回答与之相关的问题。这一创新标志着人工智能…

Windows 新型零日漏洞:远程攻击可窃取 NTLM 凭证,非官方补丁已上线

近日&#xff0c;安全研究人员披露了一个新型 Windows 零日漏洞&#xff0c;影响从Windows 7和Server 2008 R2到最新Windows 11 v24H2及Server 2025的所有Windows操作系统版本。攻击者只需诱使用户在Windows资源管理器中查看恶意文件&#xff0c;即可利用该零日漏洞窃取NTLM&am…

一款超级好用且开源免费的数据可视化工具——Superset

认识Superset 数字经济、数字化转型、大数据等等依旧是如今火热的领域&#xff0c;数据工作有一个重要的环节就是数据可视化。 看得见的数据才更有价值&#xff01; 现如今依旧有多数企业号称有多少多少数据&#xff0c;然而如果这些数据只是呆在冷冰冰的数据库或文件内则毫无…

作业14 (2023-05-22_const修饰指针)

第1题/共5题【单选题】 C程序常见的错误分类不包含:( ) A.编译错误 B.链接错误 C.栈溢出 D.运行时错误 回答正确 答案解析: 栈溢出是运行时错误的一种,因此C程序不会将栈溢出错误单独列出来,栈溢出包含在运行时错误中。 因此:选择C 第2题/共5题【单选题】 以下关于…

《Tr0ll2 靶机渗透实战:弱口令+SUID+两种缓冲区溢出+ 提权完整+fcrackzip暴力破解+shellshock漏洞+脏牛三种root提权复盘》

Tr0ll2 1、主机发现 arp-scan -l 2、端口扫描 nmap -sS -sV 192.168.66.181 nmap -sS -A -T4 -p- 192.168.66.181 nmap --scriptvuln 192.168.66.181PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.0.8 or later 22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.4 (…

redis常用部署架构之redis分片集群。

redis 3.x版本后开始支持 作用&#xff1a; 1.提升数据读写速度 2..提升可用性 分片集群就是将业务服务器产生的数据储存在不同的机器上。 redis分片集群的架构 如上图所示&#xff0c;会将数据分散存储到不同的服务器上&#xff0c;相比于之前来说&#xff0c;redis要处…

分布式数据库介绍

分布式数据库介绍 一、定义与核心概念 分布式数据库是一种在物理上分散存储、逻辑上统一管理的数据管理系统&#xff0c;其核心特征包括数据分布性、逻辑关联性、场地透明性和可扩展性。根据最新定义&#xff0c;分布式数据库需具备分布式事务处理能力、平滑扩展能力&#xf…

MybatisPlus(SpringBoot版)学习第五讲:条件构造器和常用接口

目录 1.wrapper介绍 2.QueryWrapper 2.1 例1&#xff1a;组转查询条件 Compare Nested Join Func 2.2 例2&#xff1a;组装排序条件 2.3 例3&#xff1a;组装删除条件 2.4 例4&#xff1a;条件的优先级 2.5 例5&#xff1a;组装select子句 2.6 例6&#xff1a;实现子查…

计算机视觉算法实战——手术导航:技术、应用与未来

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 手术导航中的计算机视觉&#xff1a;领域介绍 计算机视觉在手术导航领域的应用代表了现代医学与人工智…

【科研绘图系列】R语言绘制PCA与变量的相关性散点图(scatter plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据画图输出图片系统信息介绍 【科研绘图系列】R语言绘制PCA与变量的相关性散点图(scatter plot) 加载R包 library(tidyverse) library(ggpubr)数据下载 …

深度解析Spring Boot可执行JAR的构建与启动机制

一、Spring Boot应用打包架构演进 1.1 传统JAR包与Fat JAR对比 传统Java应用的JAR包在依赖管理上存在明显短板&#xff0c;依赖项需要单独配置classpath。Spring Boot创新的Fat JAR&#xff08;又称Uber JAR&#xff09;解决方案通过spring-boot-maven-plugin插件实现了"…

安科瑞微电网能量管理控制箱,光伏发电的守护者

安科瑞顾强 随着工业的发展&#xff0c;很多用电设备和工厂设备采用直流系统供电&#xff0c;直流系统的正极和负极不接地。对于不接地&#xff08;IT&#xff09;配电系统&#xff0c;应该进行绝缘电阻的监控以保证供电系统的安全运行。 AIM-D100-TS 系列直流绝缘监测仪可以…

[计算机网络]网络I/O模型

欢迎来到啾啾的博客&#x1f431;。 这是一个致力于构建完善的Java程序员知识体系的博客&#x1f4da;&#xff0c;记录学习的点滴&#xff0c;分享工作的思考、实用的技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。…

Vue中使用JsonView进行JSON数据展示

前言 最近在开发公司的管理系统的操作日志模块&#xff0c;要查看某条操作日志的请求参数&#xff0c;要将请求的参数以 JSON 格式的形式展示出来&#xff0c;于是用到了Vue-JSON-Viewer 这个插件。 一、Vue-JSON-Viewer 基础入门 插件简介 Vue-JSON-Viewer 是一个用于在Vue项…

vue vue3 走马灯Carousel

背景&#xff1a; 在项目中需要展示多张图片&#xff0c;但在页面上只有一张图片的有限位置&#xff0c;此时考虑使用轮播图实现多张图片的展示。element组件官网有走马灯Carousel的组件详细介绍。 实现效果&#xff1a; 官网链接&#xff1a;点击跳转 核心代码&#xff1a; …

重学vue3(三):vue3基本语法及使用

组合式 API是vue3 的核心特性&#xff0c;替代 Vue2 的选项式 API&#xff0c;强调逻辑复用和代码组织。基本语法如下&#xff1a; <script setup> import { ref, reactive, computed, onMounted } from vue;// 1. 响应式数据 const count ref(0); // 基本类…