当前位置: 首页 > news >正文

c++列表初始化

测试代码 :

#define _CRT_SECURE_NO_WARNINGS
#include<vector>
#include<iostream>
using namespace std;struct my_struct 
{int a;char b;string c;
};class my_class 
{
public:my_class(int x){_a = _b = x;cout << "call  my_class(int x)" << endl;}my_class(int x,char y) {_a = x;_b = y;cout << "call  my_class(int x,char y)" << endl;}void push_back(int x,int y) {cout << "call  push_back(int x,int y)" << endl;}void insert(int x) {cout << "call insert(int x)" << endl;}int _a;char _b;
};int main() 
{/** 在C++98中,标准允许使用花括号{}对数组或者*结构体元素进行统一的列表初始值设定*/int arr1[3] = {1,2,3};string arr2[] = {"abc","def","ghi"}; //使用初始化列表后可以不用指定数组元素个数,初始化列表有几个元素,数组默认就有几个元素空间my_struct a_struct = {1,'a',"abcd"};for (auto& e : arr1) { cout << e << " ";}cout << endl;for (auto& e : arr2) { cout << e << " "; }cout << endl;cout << a_struct.a << " " << a_struct.b << " " << a_struct.c;cout << endl;cout << "-----------------------------------------------" << endl;
//---------------------------------------------------------------------------------------------------------------------------------------------    /*C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型 使用初始化列表时,可添加等号(=),也可不添加。*/int x1 = 1;int x2 = { 1 };int x3{ 1 };my_class a_class = { 2,'a' };//调用了构造函数my_class b_class{ 3,'b' };//调用了构造函数int arr3[2]{1,2};cout << x1 << " " << x2 << " " << x3;cout << endl;cout << a_class._a << " " << a_class._b <<" " << b_class._a << " " << b_class._b;cout << endl;for (auto& e : arr3) { cout << e << " "; };cout << endl;cout << "-----------------------------------------------" << endl;
//---------------------------------------------------------------------------------------------------------------------------------------------    /** */std::vector<my_class> my_vector1 = { 1,{1,2},3};//在这里用初始化列表初始化my_vector1,这依赖于vector内部实现以initial_list<T>为参数的构造函数,initial_list<T>可以内部成//员是两个指针,一个指向初始化列表(也就是{})的头,一个指向初始化列表的尾,由此,在使用初始化列表vector时可以任意个参数,//1和3调用的是my_class(int x)实现初始化,{1,2}调用的是my_class(int x,int y)实现初始化。my_vector1.push_back(1);//这里其实是单参数隐式类型转换,1通过my_class(int x)转换成了my_class类型的临时对象,然后在把临时对象作为参数床底给push_back函数。my_vector1.push_back({1,2});//这里其实是多参数隐式类型转换,{1,2}通过my_class(int x,int y)转换成了my_class类型的临时对象,然后在把临时对象作为参数床底给push_back函数。--调用两个参数的构造函数就用{}for (auto& e : my_vector1) { cout << e._a << ":"<<e._b<<" "; };cout << endl;//实际上,可以把数组看做一个内部实现了initial_list<T>为参数的构造函数的类。因此可以用类似这样的方式初始化:int arr[] = {1,2,3}// 可以把内置类型看做有构造函数的类因此,内置类型也可以用类似这样的方式初始化:int x(5);int y{1},int(3)--匿名int对象。
}

运行结果如下:

http://www.dtcms.com/a/284714.html

相关文章:

  • Dijkstra 算法求解多种操作
  • Stone3D教程:免编码制作在线家居生活用品展示应用
  • 【初始Java】
  • mysql中where字段的类型转换
  • (转)Kubernetes基础介绍
  • SQL增查
  • Windows下odbc配置连接SQL Server
  • .Net将控制台的输出信息存入到日志文件按分钟生成日志文件
  • 【JavaEE进阶】使用云服务器搭建Linux环境
  • Java网络通信:UDP和TCP
  • 关于CDH以及HUE的介绍
  • vue-seo优化
  • Android构建流程与Transform任务
  • 题解:P13311 [GCJ 2012 Qualification] Speaking in Tongues
  • java面向对象-多态
  • 【前端】Power BI自动化指南:从API接入到Web嵌入
  • 旅游管理实训基地建设:筑牢文旅人才培养的实践基石
  • LeetCode热题100—— 238. 除自身以外数组的乘积
  • Pygame创建窗口教程 - 从入门到实践 | Python游戏开发指南
  • 小白学Python,网络爬虫篇(1)——requests库
  • java Integer怎么获取长度
  • 【Jmeter】报错:An error occured:Unknown arg
  • 3.PCL点云合并
  • 为什么选择Selenium自动化测试?
  • 接口黑洞?破!安全堡垒?筑!冰火炼狱?战!MES7114W终极掌控
  • 学习C++、QT---27(QT中实现记事本项目实现行列显示、优化保存文件的功能的讲解)
  • 三、CV_VGGnet
  • 栈和队列的实现,咕咕咕
  • CTF之栅栏密码的传统型、W型与偏移量
  • ota之.加密算法,mcu加密方式