📅  最后修改于: 2023-12-03 15:10:24.877000             🧑  作者: Mango
C++ 是一种通用编程语言,支持多范式编程,例如过程式编程、面向对象编程和泛型编程。C++11 是C++语言的一个版本,引入了许多新特性,其中一个关键的特性是新表达式。
Lambda 表达式是一个匿名函数,允许将函数作为参数传递给其他函数,并允许使用闭包(捕获外部变量)。
// 传统函数指针
void (*funcPointer)(int) = &myFunction;
funcPointer(42);
// Lambda 表达式
auto lambda = [](int x) { myFunction(x); };
lambda(42);
Lambda 表达式使用方括号 []
来指定捕获列表,用逗号分隔变量名称。在以下示例中,a
和 b
是值按照值复制,而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"
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"
C++11 引入了一个新的空指针常量 nullptr
,它是一个特定类型的nullptr_t。
void myFunction(int* ptr) {
if (ptr == nullptr) {
std::cout << "ptr is nullptr\n";
}
}
myFunction(nullptr); // 输出: "ptr is nullptr"
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 "
}
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++ 更加适用于现代编程问题,使得代码编写更加简单和高效。