C++11是C++语言的一个重大更新,引入了许多新的特性和语法。本篇文章将介绍一些C++11的语法特性,并结合实际例子进行讲解。
auto关键字
C++11中引入了auto关键字,可以用于自动推导变量类型。例如:
auto i = 1;
auto c = 'c';
auto d = 1.0;
c++
上面的代码中,变量i会被推导为整型int,变量c会被推导为字符型char,变量d会被推导为浮点型double。
lambda表达式
C++11支持使用lambda表达式来定义匿名函数。例如:
auto f = { return x + y; };
std::cout << f(1, 2) << std::endl;
c++
上面的代码中,定义了一个匿名函数f,其参数为两个整型值,返回值为它们的和。使用lambda表达式可以非常方便地定义一些简单的函数,避免定义多余的函数或函数对象。
智能指针
C++11引入了智能指针的概念,其中std::shared_ptr是最常用的一种。它允许多个指针共享同一个对象,当被最后一个指针所引用时,会自动销毁该对象。例如:
std::shared_ptr p1(new int(10));
std::shared_ptr p2 = p1;
std::cout << p1 << " " << p2 << std::endl;
c++
上面的代码中,p1和p2共享同一个int对象,在p2被销毁后,p1仍然可以访问该对象。
右值引用和移动语义
C++11支持右值引用和移动语义,可以提高大型对象的构造和销毁效率。例如:
class A {
public:
A() { std::cout << "default constructor" << std::endl; }
A(const A& a) { std::cout << "copy constructor" << std::endl; }
A(A&& a) { std::cout << "move constructor" << std::endl; }
};
void func(A a) { }
int main() {
A a;
func(a);
func(A());
return 0;
}
c++
上面的代码中,A类分别定义了默认构造函数、拷贝构造函数和移动构造函数,func函数的参数为一个A类对象。在main函数中,创建了一个A类对象a,并先后调用了两次func函数,分别传入a和匿名的A类对象。输出结果为:
default constructor
copy constructor
default constructor
move constructor
可以看到,对于第一次调用,会调用拷贝构造函数,而对于第二次调用,会调用移动构造函数。这样可以避免不必要的拷贝操作,提高程序效率。
以上就是C++11语法的一些实际应用介绍,这些语法特性都可以方便地帮助开发人员提高代码效率和可读性。