1.数组
一般数组就是我们平常看到的数组,比如int a[100],int b[10][10],这种数组在C语言还C++里是通用的,但是C++里面有一种大小固定的容器 std::array。
这个array容器知道自身大小;不会自动转换为指针;具有迭代器,能够很方便的遍历元素。
使用时代码如下:
#include<iostream>
#include<array>
using namespace std;
int main()
{
array<int,6> arr={1,2,3,4,5,6};
cout<<"Array size= "<<arr.size()<<endl;
cout<<"Element 2= "<<arr[1]<<endl;
return 0;
}
无论是C风格的数组还是C++风格的数组,编译器都必须知道数组的大小,在运行时数组的大小不能改变。
但是如果希望数组的大小是动态的可以使用std::vector。
2.基于区间的for循环
基于区间的for循环是除了for循环,while循环以及do/while循环的第四种循环。
std::array<int,3> arr={1,2,3};
for(int i : arr)
{
std::cout<<i<<std::endl;
}
3. 函数
当程序变得比较大了以后,将所有的代码都放到主函数里是不行的,因此我们可以定义其他函数:
例如 int add(int number1,int number2);
有返回类型,参数一和参数二。
每个函数都有一个预定义的局部变量__func__,static const char __func__[ ]="function-name";
#include<iostream>
using namespace std;
int add(int,int);
int main()
{
cout<<add(2,3)<<endl;
}
int add(int number1,int number2)
{
cout<<"Entering function: "<<__func__<<endl;
return number1+number2;
}
输出结果为:
Entering function: add
5
3.1 替代的函数语法
auto func(int i) ->int(->叫拖尾)
{
return i+1;
}
函数的返回类型不在位于开头而是位于行位的箭头->后面。main函数也可以使用这种替代语法。
3.2 函数返回类型的推断
C++14允许要求编译器自动推断出函数的返回类型,格式为 auto func(),并且忽略所有拖尾的返回类型;
auto fuc(int number1,int number2)
{
return number1/number2;
}
3.3 类型推断
类型推断允许编译器自动推断出表达式的类型。类型推断的关键字有两个:auto和decltype。
auto有四种用途:
用途一:前面介绍的替代函数语法
用途二:前面介绍的函数返回类型的推断
用途三:用于通用的lambda表达式(后面会介绍)
用途四:自动推断变量的类型。
对用途四进行介绍:
如果函数func有一个复杂的函数返回类型,例如可以返回int也可以返回double是我们就可以使用:
auto result=func();
让编译器推断返回的类型。
关键字decltype
关键字decltype把表达式作为实参,计算该表达式的类型。例如:
double x=10.1;
decltype(x) y=23;
此时编译器推断出y的类型为double。
使用auto推断表达式的类型,就不需要引用限定符和const限定符了,就是说auto去除了引用和const限定符。另外decltype没有去除这些限定符,但可能导致代码重复。(不太明白怎么用,以后看明白了回来重新改)