C++11新特性学习1

本文介绍了C++11引入的新特性,包括auto类型推导、decltype表达式类型推导、using定义别名、函数模板默认参数、列表初始化、lambda匿名函数、范围for循环、constexpr、右值引用、移动构造函数、左值转右值、nullptr、以及智能指针shared_ptr、unique_ptr和weak_ptr的使用。
摘要由CSDN通过智能技术生成

学习网站

C语言中文网:C++11教程:C++11新特性大汇总
详细特性,请参考学习网站。
在这里插入图片描述

1、auto 类型推导

auto name = value;

2、decltype 根据 exp 表达式推导出变量的类型

auto varname = value;
decltype(exp) varname = value;

区别如下所示:

//auto 和 decltype 都是 C++11 新增的关键字,都用于自动类型推导,但是它们的语法格式是有区别的,如下所示:
auto varname = value;  //auto的语法格式
decltype(exp) varname [= value];  //decltype的语法格式

//其中,varname 表示变量名,value 表示赋给变量的值,exp 表示一个表达式,方括号[ ]表示可有可无。

/*auto 和 decltype 都会自动推导出变量 varname 的类型:
auto 根据=右边的初始值 value 推导出变量的类型;
decltype 根据 exp 表达式推导出变量的类型,跟=右边的 value 没有关系。

另外,auto 要求变量必须初始化,也就是在定义变量的同时必须给它赋值;而 decltype 不要求,初始化与否都不影响变量的类型。*/

3、使用using定义别名(替代typedef)

//typedef 的定义方法和变量的声明类似:像声明一个变量一样,声明一个重定义类型,之后在声明之前加上 typedef 即可。这种写法凸显了 C/C++ 中的语法一致性,但有时却会增加代码的阅读难度。比如重定义一个函数指针时:
typedef void (*func_t)(int, int);

//与之相比,using 后面总是立即跟随新标识符(Identifier),之后使用类似赋值的语法,把现有的类型(type-id)赋给新类型:
using func_t = void (*)(int, int);

//从上面的对比中可以发现,C++11 的 using 别名语法比 typedef 更加清晰。因为 typedef 的别名语法本质上类似一种解方程的思路。而 using 语法通过赋值来定义别名,和我们平时的思考方式一致

4、C++11支持函数模板的默认模板参数

//在 C++98/03 标准中,类模板可以有默认的模板参数,如下:
template <typename T, typename U = int, U N = 0>
struct Foo
{
   
    // ...
};
//但是却不支持函数的默认模板参数:
template <typename T = int>  // error in C++98/03: default template arguments
void func()
{
   
    // ...
}
//现在这一限制在 C++11 中被解除了。上面的 func 函数在 C++11 中可以直接使用,代码如下:
int main(void)
{
   
    func();   //T = int
    return 0;
}

5、C++11列表初始化(统一了初始化方式)

class Foo
{
   
public:
    Foo(int) {
   }
private:
    Foo(const Foo &);
};

int main(void)
{
   
    Foo a1(123);
    Foo a2 = 123;  //error: 'Foo::Foo(const Foo &)' is private
    Foo a3 = {
    123 };
    Foo a4 {
    123 };
    int a5 = {
    3 };
    int a6 {
    3 };
    return 0;
}

6、lambda匿名函数

语法:

[外部变量访问方式说明符] (参数) mutable noexcept/throw() 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值