C++11新特性

1、auto和decltype

2、右值引用

左值:可以放在等号左边的值。可以取地址且有名字。例如:

  • 前置自增自减表达式++i、--i

右值:不可以放在等号左边的值。不可以取地址且没有名字。例如:

  • 后置自增自减表达式i++、i--

int a = b + c; 

a是左值,有变量名,可以取地址,也可以放到等号左边, 表达式b+c的返回值是右值,没有名字且不能取地址,&(b+c)不能通过编译,而且也不能放到等号左边。

int a = 4; // a是左值,4作为普通字面量是右值

将亡值(c++11):即将要销毁的值,通过“盗取”其它变量内存空间方式获取的值,在确保其它变量不再被使用或者即将被销毁时,可以避免内存空间的释放和分配,延长变量值的生命周期,常用来完成移动构造或者移动赋值的特殊任务。

class A {
    xxx;
};
A a;
auto c = std::move(a); // c是将亡值
auto d = static_cast<A&&>(a); // d是将亡值

参考:左值引用、右值引用、移动语义、完美转发,你知道的不知道的都在这里

3、std::function & std::bind & lambda表达式

4、智能指针

5、nullptr

nullptr是c++11引入的空指针常量值,NULL其实是个int型的值0,在重载函数中容易因为二义性编译失败。

void func(void *ptr) {
   cout << "func ptr" << endl;
}

void func(int i) {
   cout << "func i" << endl;
}

int main() {
   func(NULL); // 编译失败,会产生二义性
   func(nullptr); // 输出func ptr
   return 0;
}

6、final & override

final:禁止当前类进一步派生,类中的虚函数禁止进一步重载。

override:修饰派生类的函数,表明函数是基类函数的重写。此函数必须在父类中存在虚函数。

参考:

c++11新特性,所有知识点都在这了!-腾讯云开发者社区-腾讯云

一文吃透C++11中auto和decltype知识点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值