📜  新表达式 - C++ (1)

📅  最后修改于: 2023-12-03 15:10:24.877000             🧑  作者: Mango

新表达式 - C++

C++ 是一种通用编程语言,支持多范式编程,例如过程式编程、面向对象编程和泛型编程。C++11 是C++语言的一个版本,引入了许多新特性,其中一个关键的特性是新表达式。

新表达式
1. Lambda 表达式

Lambda 表达式是一个匿名函数,允许将函数作为参数传递给其他函数,并允许使用闭包(捕获外部变量)。

// 传统函数指针
void (*funcPointer)(int) = &myFunction;
funcPointer(42);

// Lambda 表达式
auto lambda = [](int x) { myFunction(x); };
lambda(42);

Lambda 表达式使用方括号 [] 来指定捕获列表,用逗号分隔变量名称。在以下示例中,ab 是值按照值复制,而c 是引用。

int a = 1, b = 2, c = 3;
auto lambda = [a, &b, &c]() {
    std::cout << a << ", " << b << ", " << c << "\n";
};
a = 4;
b = 5;
c = 6;
lambda(); // 输出: "1, 5, 6"
2. 元组解包

C++11 引入了一个新函数 std::tie(),用于从元组中解包多个值。以下是 std::tie() 的示例。

std::tuple<int, float, std::string> myTuple(42, 3.14f, "Hello World");

int a;
float b;
std::string c;
std::tie(a, b, c) = myTuple;

std::cout << a << ", " << b << ", " << c << "\n"; // 输出: "42, 3.14, Hello World"
3. nullptr

C++11 引入了一个新的空指针常量 nullptr,它是一个特定类型的nullptr_t。

void myFunction(int* ptr) {
    if (ptr == nullptr) {
        std::cout << "ptr is nullptr\n";
    }
}

myFunction(nullptr); // 输出: "ptr is nullptr"
4. Range-based for 循环

C++11 通过引入基于范围的 for 循环,使得循环遍历更加简便。

std::vector<int> myVector = {1, 2, 3, 4, 5};
for (int& i : myVector) {
    i *= 2;
}

for (const auto& i : myVector) {
    std::cout << i << " "; // 输出: "2 4 6 8 10 "
}
5. 类型别名

C++11 引入了类型别名,允许程序员使用 typedef 更加简单,例如 using myInt = int; 可以定义一个名为 myInt 的类型,与 int 具有相同的行为。

using myInt = int;

myInt a = 42;
std::cout << a << "\n"; // 输出: "42"
结论

C++11 引入许多新的语言特性,其中包括 Lambda 表达式、元组解包、nullptr、基于范围的 for 循环和类型别名。这些新的功能使得 C++ 更加适用于现代编程问题,使得代码编写更加简单和高效。