快速了解C++11新特性:lambda表达式、auto类型推导等

需积分: 9 0 下载量 95 浏览量 更新于2024-09-11 收藏 166KB PDF 举报
"C++11 新特性概述" C++11 是对 C++ 语言的扩展和修正,包括核心语言的新机能和标准程序库(STL)的扩展。C++11 中引入了许多新特性,例如 lambda 表达式、类型推导关键字 auto、decltype 和模板的大量改进。 auto 关键字 auto 关键字是 C++11 中引入的新特性,用于自动类型推导。auto 的自动类型推导可以大大简化编程工作,通过 auto,可以从初始化表达式中推断出变量的数据类型。auto 实际上是在编译时对变量进行了类型推导,因此不会对程序的运行效率造成不良影响。auto 的应用非常广泛,不仅可以用于基本数据类型,还可以用于自定义类型和模板参数。 例如,使用 auto 可以这样写: ```cpp auto i = 1; auto d = 1.0; auto str = "Hello World"; auto ch = 'A'; auto func = less<int>(); vector<int> iv; auto ite = iv.begin(); auto p = new Foo(); // 对自定义类型进行类型推导 ``` 在模板中,auto 也可以发挥重要作用。例如,在以下例子中,如果不使用 auto,就必须声明 Product 这一模板参数: ```cpp template<typename Product, typename Creator> void processProduct(const Creator& creator) { Product* val = creator.makeObject(); // do something with val } ``` 如果使用 auto,可以这样写: ```cpp template<typename Creator> void processProduct(const Creator& creator) { auto val = creator.makeObject(); // do something with val } ``` decltype 关键字 decltype 关键字是 C++11 中引入的新特性,用于获取一个表达式的类型。decltype 的应用非常广泛,例如,可以用于获取一个函数的返回类型或一个变量的类型。 例如,使用 decltype 可以这样写: ```cpp int x = 5; decltype(x) y = 10; // y 的类型是 int ``` 模板改进 C++11 中的模板改进包括对模板参数的推导、模板别名和模板元编程等。模板参数的推导可以大大简化模板的使用,例如: ```cpp template<typename T> void func(T t) { // do something with t } func(10); // T 的类型是 int ``` 模板别名可以使得模板的使用更加简洁,例如: ```cpp template<typename T> using Vec = vector<T>; Vec<int> vi; // 等同于 vector<int> ``` 模板元编程可以使得编译器在编译时执行一些操作,例如: ```cpp template<int N> struct Factorial { enum { value = N * Factorial<N - 1>::value }; }; template<> struct Factorial<0> { enum { value = 1 }; }; cout << Factorial<5>::value << endl; // 输出 120 ``` C++11 中的新特性可以大大提高编程效率和代码可读性。