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++更加现代化、高效、易用。
Copyright 2015-2022 亚太时尚网版权所有 备案号:沪ICP备2020036824号-11 联系邮箱: 562 66 29@qq.com