C++11是C++语言的一个重大更新,引入了许多新特性,包括自动类型推导、lambda表达式、右值引用、智能指针等等。这些新特性使得C++更加现代化、高效、易用。也是面试容很容易被问到一个问题,下面我将简要介绍一些C++11的新特性: 自动类型推导 C++11引入了auto关键字,可以让编译器自动推导变量的类型。这样可以减少代码中的重复代码,提高代码的可读性和可维护性。例如: autoi=42;//推导为int类型 autod=3.14;//推导为double类型 autos='hello';//推导为constchar*类型 lambda表达式 C++11引入了lambda表达式,可以方便地定义匿名函数。这样可以减少代码中的重复代码,提高代码的可读性和可维护性。例如: autof=[](intx,inty){returnx+y;}; intz=f(1,2);//z的值为3 右值引用 C++11引入了右值引用,可以方便地实现移动语义和完美转发。这样可以提高代码的性能和效率。例如: classMyString{ public: MyString:data_(nullptr),size_(0){} MyString(constchar*str):data_(newchar[strlen(str)+1]),size_(strlen(str)){ strcpy(data_,str); } MyString(MyString&&other):data_(other.data_),size_(other.size_){ other.data_=nullptr; other.size_=0; } ~MyString{ delete[]data_; } private: char*data_; size_tsize_; }; 更多关于右值引用的内容,感兴趣的小伙伴可以翻看我之前的帖子,有专门的介绍。 智能指针 C++11引入了智能指针,可以方便地管理动态分配的内存,避免内存泄漏和悬空指针的问题。C++11中有两种智能指针:std::unique_ptr和std::shared_ptr。 std::unique_ptr是一种独占式智能指针,它拥有对动态分配的对象的唯一所有权。当std::unique_ptr被销毁时,它所拥有的对象也会被销毁。例如: std::unique_ptr std::cout<<*p< std::shared_ptr是一种共享式智能指针,它可以被多个指针共享拥有权。当最后一个std::shared_ptr被销毁时,它所拥有的对象也会被销毁。例如: std::shared_ptr std::shared_ptr std::cout<<*p1<<''<<*p2< C++11的智能指针使得动态内存管理更加方便和安全。 range-basedfor循环 C++11引入了range-basedfor循环,可以方便地遍历容器中的元素。这样可以减少代码中的重复代码,提高代码的可读性和可维护性。例如: std::vector for(autox:v){ std::cout< } nullptr C++11引入了nullptr关键字,可以代替NULL宏定义。这样可以避免一些潜在的错误。例如: voidf(int*p){} f(nullptr);//可以编译通过 constexpr C++11引入了constexpr关键字,可以在编译期间计算表达式的值。这样可以提高代码的性能和效率。例如: constexprintfactorial(intn){ returnn==0?1:n*factorial(n-1); } intx=factorial(5);//x的值为120 更多关于constexpr的内容,感兴趣的小伙伴可以翻看我之前的帖子,有专门的介绍。 static_assert C++11引入了static_assert关键字,可以在编译期间检查表达式的值是否为真。这样可以避免一些潜在的错误。例如: static_assert(sizeof(int)==4,'intmustbe4bytes');//如果sizeof(int)不等于4,编译会失败 变长参数模板 C++11引入了变长参数模板,可以方便地处理可变数量的参数。这样可以提高代码的灵活性和可维护性。例如: template voidf(Args...args){ std::cout< } f(1,2,3);//打印3 f('hello',3.14);//打印2 线程支持库 C++11引入了线程支持库,可以方便地创建和管理线程。这样可以提高代码的并发性和可维护性。例如: #include #include voidf{ std::cout<<'hello,world'< } intmain{ std::threadt(f);//创建一个新线程 t.join;//等待线程结束 return0; } 结尾 以上是C++11的一些新特性,它们使得C++更加现代化、高效、易用。 |
|