当前位置: 首页 > news >正文

C++中的常见语法糖汇总

C++中的语法糖是指使代码更简洁、可读性更高的语言特性和简化的语法。以下是一些常见的C++语法糖:

1. 自动类型推导(auto

使用 auto 关键字可以让编译器自动推导变量的类型,简化变量的声明。

auto x = 10;         // 编译器推导 x 为 int
auto y = 3.14;       // 编译器推导 y 为 double
auto z = "Hello";    // 编译器推导 z 为 const char*

2. 范围基于的 for 循环

范围基于的 for 循环使遍历容器中的元素变得更简单。

std::vector<int> vec = {1, 2, 3, 4, 5};
for (int num : vec) {std::cout << num << std::endl;
}

3. 初始化列表

可以使用初始化列表对对象进行初始化,这在类的构造函数中非常有用。

std::vector<int> vec = {1, 2, 3, 4, 5}; // 初始化列表

4. Lambda 表达式

Lambda 表达式用于定义匿名函数,使代码更简洁和可读。

auto add = [](int a, int b) { return a + b; };
int result = add(3, 4); // result 为 7

5. nullptr

nullptr 是一种类型安全的空指针,取代了传统的 NULL

int* p = nullptr; // 空指针

6. 统一的初始化语法

C++11 引入了大括号 {} 作为统一的初始化语法,用于初始化类对象、数组和内置类型。

int arr[] = {1, 2, 3};
std::vector<int> vec{1, 2, 3};

7. decltype

decltype 关键字用于获取表达式的类型。

int x = 5;
decltype(x) y = 10; // y 的类型与 x 相同,即 int

8. using 关键字

using 关键字可以用于创建类型别名,取代了传统的 typedef

using IntVec = std::vector<int>;
IntVec vec = {1, 2, 3};

9. 类内成员初始化

C++11 允许在类内直接初始化成员变量。

class MyClass {
public:int x = 10;double y = 3.14;
};

10. 默认和删除的函数

可以使用 = default= delete 来显式声明默认函数和删除函数。

class MyClass {
public:MyClass() = default; // 默认构造函数MyClass(const MyClass&) = delete; // 禁用拷贝构造函数
};

11. 移动语义和 std::move

移动语义允许对象资源的高效转移,std::move 可以显式地将对象转为右值引用。

std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = std::move(vec1); // vec1 的资源被转移到 vec2

12. 委托构造函数

C++11 允许一个构造函数调用另一个构造函数,简化了构造函数的实现。

class MyClass {
public:MyClass() : MyClass(0) {} // 委托构造函数MyClass(int x) : x(x) {}private:int x;
};

这些语法糖在不同的场景中使代码更简洁、更清晰,并且减少了手动管理资源和类型推导的繁琐。理解并善用这些特性能够显著提高C++编程的效率和代码质量。

http://www.lryc.cn/news/365680.html

相关文章:

  • TensorFlow Playground神经网络演示工具使用方法详解
  • 【git】subtree 简单教程
  • C语言基础:字符串函数使用与剖析
  • 搭建Vulnhub靶机网络问题(获取不到IP)
  • Prompt 提示词强大方法论和框架2
  • C语言分支和循环(2)
  • 14.FreeRTOS 流媒体缓存 Stream Buffer
  • 利用ffmpeg把视频分解成图片(每秒x张图)再图片合成视频
  • 冯喜运:6.7今日外汇黄金原油走势分析及日内操作策略
  • [网络基础]——计算机网络(OSI)参考模型 详解
  • 使用 Java 获取图片的 MD5 编码
  • GO——泛型
  • TSP(Python):Qlearning求解旅行商问题TSP(提供Python代码)
  • 【精通NIO】NIO介绍
  • ssh远程管理
  • 【ai】pycharm远程ssh开发
  • leetcode 9 回文数
  • 学习Python的基础知识
  • 第五届上海市青少年算法竞赛网络同步赛(小学组)
  • 【区分vue2和vue3下的element UI Cascader 级联选择器组件,分别详细介绍属性,事件,方法如何使用,并举例】
  • pottery,一个超酷的 Python 库!
  • 【Android面试八股文】在Java中重载和重写是什么意思,区别是什么?
  • 【第二篇】SpringSecurity源码详解
  • 基于Python+FFMPEG环境下载B站歌曲
  • 静态 VxLAN 浅析及配置示例(头端复制)
  • 2023年与2024年AI代理基础设施的演进:六大关键变化
  • 实验三-8086指令的应用《计算机组成原理》
  • 《维汉翻译通》App全新升级:维吾尔语短文本翻译、汉语拼音标注、维语词典、谚语格言名句等功能统统免费!还支持维吾尔文OCR识别提取文字!
  • 全年申报!2024年陕西省双软企业认定条件标准、申报好处费用
  • 系统移植 (以将Linux系统移植到S5P6818开发板为例)