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++编程的效率和代码质量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值