c11标准

时间:2023-03-09 14:37:33
c11标准

在编译器vs13及其以上可以使用 编译器对语言的一种优化

1.变量初始化 int a=0,a(10),a{10};定义a的值的三种方式

2.nullptr 相当于c的null 有类型 更加的安全

3.auto 自适应类型 用于返回类型比较复杂的返回值

4.decltype 用一个变量定义同类型的变量/该类型的引用

5.关于for的一个用法for(i:arr) 变量数组里所有的数据

6.类的别名 C语言用 typedef int INT typedef 类型名 别名来定义 c++中用using INT=int来使用

7.类中成员 一般是构造中赋初值 C11可以直接在类中赋初值

8.A()=default;自动生成默认构造

9.委托  在构造中调用自己的其他构造

10.final 放在虚函数后面防止重写终极函数不能重写 放在类后面终极类不能派生其他子类

 #include<iostream>
#include<vector>//向量
using namespace std;
class A
{
int data = ;
int y;
public:
//A(){ data = 0; }//构造函数
A() = default;//默认构造 如果写了其他构造 默认不在自动生成一个构造函数
A(int data) :data(data){}//有参构造 初始化新参列表
A(int x, int y) :A(x){ this->y = y; }//在里面调用其他构造帮忙做事情 --->委托
}; class B
{
public:
virtual void fun(){
cout << "父类函数" << endl;
}
virtual void fun2()final{//加上final为终极类不能进行派生
cout << "父类函数2" << endl;
}
};
class C :public B
{
void fun(){
cout << "子类函数" << endl;
}
// void fun2(){
// cout << "类函数2" << endl;
// }子类函数fun2不能继承父类的函数 因为父类函数是终极函数 不能进行派生
};
class D final//不能派生任何子类
{ };
class E//:public 不能派生D
{ };
int main()
{
A aa;
int a = ;//c语言的赋值方式
int b();//c++的赋值方式 常用于初始化形参列表
int c{};//c11标准提出
int d[]{, , , , , , , , };//数组初始化
NULL;//c语言指针空 宏定义
nullptr;//c++的指针空 void*类型 auto x = 3.14;//auto类型 根据后面的值返回定义的类型 必须初始化否则无意义
vector<int>arr = { , , , , , , , };
//初始化数组
vector<int>::iterator it = arr.begin();//指向第一个元素 iterator用于修改元素的值
auto p = arr.begin();
cout << *it << endl << *p << endl;
int y;//int类型的变量
decltype(y) z;//定义一个变量z
//decltype是返回y的类型 z的类型和y的类型一样 int z
//z是什么类型 根据前面的y确定的 目的:定义同类型的变量
decltype((y)) py = y;//定义一个引用类型 相当于 int& y
for (auto i : arr)//循环打印arr的所有元素 i是新定义的变量 arr是数组
{
cout << i;
}
using INT = int;//给int取别名 INT
using ARR = int[];
ARR ab;//相当于int ab[4];
cin.get();
return ;
}