首页 > 编程语言 >C++新特性(待完善)

C++新特性(待完善)

时间:2022-10-07 17:56:46浏览次数:55  
标签:完善 const 推导 int auto 特性 C++ 类型 表达式

C++ 11的特性:

1.auto 类型推导:

auto 关键字:自动类型推导,编译器会在编译期间通过初始值或者函数返回值推导出变量的类型,通过 auto 定义的变量必须有初始值。
auto 关键字基本的使用语法如下:

auto var = val1 + val2; // 根据 val1 和 val2 相加的结果推断出 var 的类型
auto ret = [](double x){return x*x;}; // 根据函数返回值推导出 ret 的类型
auto al = { 10, 11, 12 }; //类型是std::initializer_list<int>

首先,如果初始化表达式是引用,首先去除引用;上一步后,如果剩下的初始化表达式有顶层的 const 或 volatile 限定符,去除掉。使用 auto 关键字声明变量的类型,不能自动推导出顶层的 const 或者 volatile,也不能自动推导出引用类型,需要程序中显式声明,比如以下程序:

const int v1 = 101;
auto v2 = v1; // v2 类型是int,脱去初始化表达式的顶层const
v2 = 102; // 可赋值
int a = 100;
int &b = a;
auto c = b; // c 类型为int,脱去初始化表达式的 &

初始化表达式为数组,auto 关键字推导的类型为指针。数组名在初始化表达式中自动隐式转换为首元素地址的右值。

int a[9];
auto j = a; // 此时j 为指针为 int* 类型,而不是 int(*)[9] 类型
std::cout << typeid(j).name() << " "<<sizeof(j)<<" "<<sizeof(a)<< std::endl;

注意:编译器推导出来的类型和初始值的类型并不完全一样,编译器会适当地改变结果类型使其更符合初始化规则。

2.decltype 类型推导

decltype 关键字:decltype 是 “declare type” 的缩写,译为“声明类型”。和 auto 的功能一样,都用来在编译时期进行自动类型推导。如果希望从表达式中推断出要定义的变量的类型,但是不想用该表达式的值初始化变量,这时就不能再用 auto。decltype 作用是选择并返回操作数的数据类型。

const int&& foo();
const int bar();
int i;
struct A { double x; };
const A* a = new A();
decltype(foo()) x1; // 类型为const int&&
decltype(bar()) x2; // 类型为int
decltype(i) x3; // 类型为int
decltype(a->x) x4; // 类型为double
decltype((a->x)) x5; // 类型为const double&

3. lambda 表达式

lambda 表达式,又被称为 lambda 函数或者 lambda 匿名函数。

[capture list] (parameter list) -> return type { function body; };

capture list:捕获列表,指 lambda 所在函数中定义的局部变量的列表。定义在与 lambda 函数相同作用域的参数引用也可以被使用,一般被称作 closure(闭包),以下为闭包的常见用法。

 

标签:完善,const,推导,int,auto,特性,C++,类型,表达式
From: https://www.cnblogs.com/acec/p/16760167.html

相关文章

  • try语句的新特性
    JDK7的新特性在try的后面可以增加一个()在括号中可以定义流对象这个流对象的作用域就在try中有效try中的代码执行完毕,会自动把流对象释放,不用写finally try(FileInp......
  • Effective C++ - 条款11 - operator=处理自我赋值问题
    出现问题的场景:例如a[i]=a[j]当i=j时,或者*pb=*pa当pa和pb指向同一个对象时。终极解决方案:copy-and-swap技术。copy-and-swap实现:1)创建rhs的副本2)将*this对象和副本......
  • Visual Studio Code设置自己的C++代码风格
    VisualStudioCode使用Microsoft出品的C/C++插件,借助ClangFormat工具进行代码格式化。在设置(settings.json)中,可以自行修改代码格式化的样式,如:{"C_Cpp.clang_format_f......
  • C++模板类-数组
    /*Container.h所有容器的基类/*MemoryObject内存申请基类我使用TBB申请内存*/template<typenameT> classContainer:publicMemoryObject { protected: T*C......
  • C++模板基础知识
    源码编译环境:win10x86反汇编软件:IDAPro(胖大妈)第一次接触到模板是在C#的泛型编程,对其表面的理解是可以对一些约束范围内参数类型的方法进行重用,可以少写一些方法。在后......
  • C++11特性(上)
    写在前面今天我们谈谈C++的一些语法,这些语法是C++11标准下新增的.有的人感觉学C++很难,那么C++11标准出来之后你会发现学习的成本又增加了.C++11增添了很多特性,有有用的,......
  • C++绘制玫瑰花
    C++绘制玫瑰花源码#include<stdio.h>#include<windows.h>#include<math.h>#include<graphics.h>#include<mmsystem.h>#pragmacomment(lib,"winmm.lib")//定......
  • C/C++基于朋友圈的商品推荐系统
    C/C++基于朋友圈的商品推荐系统基于朋友圈的商品推荐【课题内容和要求】模拟基于朋友圈的商品推荐,可以用于任何电商,如淘宝、京东等。假设目前用户有100人,每人均有自己......
  • 模板基类与正确的派生类函数调用--Effective C++ Item 43
    问题描述假设我们有这样一个业务场景,我们管理着许多公司,每个公司都有一个自己的许多日志信息需要处理,于是为了方便,我们写了一个模板类用来处理这些公司的信息,并且将这些公......
  • 路由高级特性-路由递归、等价路由
    一、路由递归先来看一个简单的示例在如图示拓扑中,RTA需要访问30.1.2.0/24网段,如果在RTA中配置静态路由iproute-static30.1.2.0255.255.255.020.1.1.2但注意观察,在路由表......