打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
UC头条:面试高频问题之C 11新特性
userphoto

2023.06.02 山西

关注

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_ptrp(newint(42));

std::cout<<*p<<='' p=''>

std::shared_ptr是一种共享式智能指针,它可以被多个指针共享拥有权。当最后一个std::shared_ptr被销毁时,它所拥有的对象也会被销毁。例如:

std::shared_ptrp1(newint(42));

std::shared_ptrp2=p1;

std::cout<<*p1<<''<<*p2<<='' p=''>

C++11的智能指针使得动态内存管理更加方便和安全。

range-basedfor循环

C++11引入了range-basedfor循环,可以方便地遍历容器中的元素。这样可以减少代码中的重复代码,提高代码的可读性和可维护性。例如:

std::vectorv={1,2,3,4,5};

for(autox:v){

std::cout<<><>< p=''><><>

}

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<<><='' p=''>

}

f(1,2,3);//打印3

f('hello',3.14);//打印2

线程支持库

C++11引入了线程支持库,可以方便地创建和管理线程。这样可以提高代码的并发性和可维护性。例如:

#include

#include

voidf{

std::cout<<'hello,world'<<>< p=''><>

}

intmain{

std::threadt(f);//创建一个新线程

t.join;//等待线程结束

return0;

}

结尾

以上是C++11的一些新特性,它们使得C++更加现代化、高效、易用。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++开发者都应该使用的10个C++11特性
浅谈C++普通指针和智能指针管理动态内存的陷阱
C++ 智能指针 unique
现代 C++ 救不了程序员!
Boost.shared_ptr必须注意的一些地方
C 11 常用特性的使用经验总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服