type
date
status
slug
summary
tags
category
icon
password
网址

1.auto函数 类型推导

C++11引入了auto 和 decltype 关键字实现类型推导,通过这两个关键字不仅能方便地获取复杂的类型,而且还能简化书写,提高编码效率。
auto类型推导:auto 定义的变量,可以根据初始化的值,在编译时推导出变量名的类型。
需要初始化
auto不能推出数组类型;
auto不能在结构体中推出数据成员的类型;
对于多个变量进行定义时,要求类型保持一致。

auto的限制

总结: 1、C11 中 auto 成为类型指示符(type-specifier)。 1、auto不能用于函数参数。 2、auto不能用于非静态成员变量 3、 auto 无法定义数组 4、 实例化模板时不能使用auto作为模板参数。

2.decltype关键字

仅得到类型,不用初始化
sizeof() : 只计算类型 / 变量所占字节个数,对表达式不计算
 
decltype 关键字,用来在编译时推导出一个表达式的类型。 它的语法格式如下∶ decltype (exp) 其中,exp表示一个表达式(expression)。 从格式上来看,decltype 很像sizeof-—用来推导表达式类型大小的操作符。类似于sizeof,decltype 的推导过程是在编译期完成的,并且不会真正计算表达式的值。
函数表达式

3.基于范围的for循环

在C98中,不同的容器和数组,遍历的方法不尽相同,写法不统一,也不够简洁,而C++11基于范围的 for循环以统一、简洁的方式来遍历容器和数组,用起来更方便了。 在C++中遍历一个数组(容器)的方法一般是这样的
在 C++11基于范围的 for循环:
以下是基于范围的 for 循环的一般格式:
ElemType:是范围变量的数据类型。它必须与数组(容器)元素的数据类型一样,或者是数组元素可以自动转换过来的类型。 val :是范围变量的名称。该变量将在循环迭代期间依次接收数组中的元素值。在第一次循环迭代期间, 它接收的是第一个元素的值;在第二次循环迭代期间,它接收的是第二个元素的值;以此类推。 array:是要让该循环进行处理的数组(容器)的名称。该循环将对数组中的每个元素迭代一次。 statement:是在每次循环迭代期间要执行的语句。要在循环中执行更多的语句,则可以使用一组大括号来包围多个语句。与其他循环体一样,可以用continue来结束本次循环,也可以用break来跳出整个循环。

4.指针空值——nullptr

初始化指针是将其指向一个"空"的位置,比如 0。由于大多数计算机系统不允许用户程序写地址为0的内存空间,倘若程序无意中对该指针所指地址赋值,通常在运行时就会导致程序退出。虽然程序退出并非什么好事,但这样一来错误也容易被程序员找到。因此在大多数的代码中,我们常常能看见指针初始化的语法如下∶
NULL可能被定义为字面常量0,或者是定义为无类型指针(void *)0常量。不过无论采用什么样的定义,我们在使用空值的指针时,都不可避免地会遇到一些麻烦。让我们先看一个关于函数重载的例子。这个例子我们引用自C++11标准关于 nullptr 的提案。
引起该问题的元凶是字面常量0的二义性,在C++98标准中,字面常量0的类型既可以是一个整型,也可以是一个无类型指针(void * )。如果程序员想在代码清单中调用fun(char * )版本的话,则必须像随后的代码一样,对字面常量0进行强制类型转换((char*)0)并调用,否则编译器总是会优先把0看作是一个整型常量。 在C++11新标准中,出于兼容性的考虑,字面常量0的二义性并没有被消除。但标准还是为二义性给出了新的答案,就是 nullptr。在C++11标准中,nullptr 是一个所谓"指针空值类型"的常量。指针空 值类型被命名为 nullptr_t,事实上,我们可以在支持 nullptr的头文件(cstddef)中找出如下定义∶
nullptr_t的定义,与传统的先定义类型,再通过类型声明值的做法完全相反(充分利用了decltype 的功能)。我们发现,在现有编译器情况下,使用nullptr_t 的时候必须 #include(#include 有些头文件也会间接 #include,比如),而 nullptr则不用。这大概就是由于nullptr是关键字,而 nullptr_t是通过推导而来的缘故。
简单而言,由于nullptr是有类型的,且仅可以被隐式转化为指针类型。
注意: 1、nullptr 是C11新引入的关键字,是一个所谓"指针空值类型"的常量,在C++程序中直接使用。 2、在C11 中 , sizeof(nullptr) 与 sizeof((void*)0) 所占的字节数相同都( 4,或 8)。 3、为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。

5.typedef 与 using

6.string的简单使用

C语言的字符串 & C++ 的字符串