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

建立网站的请示网站上传后

建立网站的请示,网站上传后,建设银行网站短信错误6次,用php做网站要用构架吗先说结论,用std::initializer_list初始化vector,内部逻辑是先生成了一个临时数组,进行了拷贝构造,然后用这个数组的起终指针初始化initializer_list。然后再用initializer_list对vector进行初始化,这个动作又触发了拷贝…

先说结论,用std::initializer_list初始化vector,内部逻辑是先生成了一个临时数组,进行了拷贝构造,然后用这个数组的起终指针初始化initializer_list。然后再用initializer_list对vector进行初始化,这个动作又触发了拷贝构造。

所以说,用initializer_list初始化,还是有优化空间的。

感觉吧,如果你真想用vector保存对象,减少一半的拷贝动作的方法:最好用vector的emplace_back把数据给move进去,或者原地初始化。

或者,就用vector保存指针

std::vector<std::string> vec1{ "ant", "bat", "cat" };

 运行到initializer_list的构造函数:

D:\DevTools\VS2017\VC\Tools\MSVC\14.16.27023\include\initializer_listtemplate<class _Elem>class initializer_list{	// list of pointers to elements
public:typedef _Elem value_type;typedef const _Elem& reference;typedef const _Elem& const_reference;typedef size_t size_type;typedef const _Elem* iterator;typedef const _Elem* const_iterator;constexpr initializer_list() noexcept: _First(nullptr), _Last(nullptr){	// empty list}constexpr initializer_list(const _Elem *_First_arg,const _Elem *_Last_arg) noexcept: _First(_First_arg), _Last(_Last_arg){	// construct with pointers}  //。。。。。。。。。。。。。。。。运行到这里。。。。。。。。。。。。。。..........};

这个std::initializer_list是怎么个事呢,它就是一个wrapper,一个viewer。注意它的构造函数,接收的是起始指针和末尾的指针。所以std::initializer_list就是保存了起终指针。所以std::initializer_list对象的拷贝,也是属于“浅拷贝”,保存的都是指针,不影响它们指向的数据。

下面的描述,说明了:

https://cplusplus.com/reference/initializer_list/initializer_list/

initializer_list objects are automatically constructed as if an array of elements of type T was allocated, with each of the elements in the list being copy-initialized to its corresponding element in the array, using any necessary non-narrowing implicit conversions.

The initializer_list object refers to the elements of this array without containing them: copying an initializer_list object produces another object referring to the same underlying elements, not to new copies of them (reference semantics).

The lifetime of this temporary array is the same as the initializer_list object.

通过这个了例子,说明了初始化initializer_list所用的起终指针,是来自于一个
“数组”,这个数组提前被拷贝构造函数初始化过了。相当于先进行了三次拷贝动作。class MyDate
{
public:MyDate()//构造函数{std::cout << "构造函数 this地址 " << this << std::endl;}~MyDate()//析构函数{std::cout << "析构函数" << std::endl;}MyDate(std::initializer_list<MyDate>& d)//initializer_list拷贝构造函数{std::cout << "initializer_list拷贝构造函数" << std::endl;}MyDate(const MyDate& d)//拷贝构造函数{std::cout << "/拷贝构造函数 scr地址 " << &d << std::endl;std::cout << "拷贝构造函数 this地址 " << this << std::endl;}MyDate& operator=(const MyDate& d)//赋值运算符重载{std::cout << "赋值运算符重载" << std::endl;return *this;}MyDate* operator&()//取地址运算符重载(&){std::cout << "取地址运算符重载(&)" << std::endl;return this;}const MyDate* operator&() const//const修饰的取地址运算符重载(const &){//std::cout << "const修饰的取地址运算符重载(const &)" << std::endl;return this;}int val;
};int main()
{
构造函数 this地址 000000000014F1C4MyDate d0; std::cout << "d0 already initialized" << std::endl;std::cout <<  std::endl;/拷贝构造函数 scr地址 000000000014F1C4  “看地址,说明用d0进行的初始化”
拷贝构造函数 this地址 000000000014F1E4MyDate d1{ d0};std::cout << "d1 already initialized" << std::endl;std::cout << std::endl;打印信息
//拷贝构造函数 scr000000000014F1C4 “看地址,说明用d0进行的初始化”
拷贝构造函数 this000000000014FDA8
/拷贝构造函数 scr000000000014F1C4 “看地址,说明用d0进行的初始化”
拷贝构造函数 this000000000014FDAC
/拷贝构造函数 scr000000000014F1C4 “看地址,说明用d0进行的初始化”
拷贝构造函数 this000000000014FDB0解释:
初始化了一个长度为3的“临时”数组,用d0进行了三次构造拷贝动作,数组中每个对象的地址分别为
000000000014FDA8
000000000014FDAC
000000000014FDB0紧接着打印:
/拷贝构造函数 scr地址 000000000014FDA8
拷贝构造函数 this地址 00000000005E3660
/拷贝构造函数 scr地址 000000000014FDAC
拷贝构造函数 this地址 00000000005E3664
/拷贝构造函数 scr地址 000000000014FDB0
拷贝构造函数 this地址 00000000005E3668解释:
这些打印信息,是把临时数组里的对象拷贝进了vector里:
vector(initializer_list<_Ty> _Ilist, const _Alloc& _Al = _Alloc()): _Mybase(_Al){	// construct from initializer_list, optional allocator_Range_construct_or_tidy(_Ilist.begin(), _Ilist.end(), random_access_iterator_tag{});}std::vector < MyDate> d2{ d0,d0,d0 };//std::vector < MyDate> d2{ d0,d0,d0 };这段代码相当于:
//std::vector<MyDate> dt;
//dt.reserve(3);
//dt.emplace_back(d0);
//dt.emplace_back(d0);
//dt.emplace_back(d0);
//std::initializer_list lst(dt.begin(), dt.end());
//std::vector < MyDate> d2(lst); //对vector用initializer_list进行初始化return 1;
}

 

http://www.sczhlp.com/news/55663/

相关文章:

  • 水木网站建设制作图
  • 网站焦点图素材网站推广互联网推广
  • 甘孜州建设局网站兰州网站建设小程序
  • 网站主题模板下载自己做一元夺宝网站
  • P5088 矩形
  • 2025-08-31 antd的menu垂直菜单示例无法渲染出来?==》没有引用SubMenu组件
  • 怪不得context 用的快,原来系统占用很多
  • day30 多智能体编排高级-OpenAI开源Agents SDK智能体开发实战
  • P12911 [POI 2020/2021 R2] 棋盘 / Projekt planszy
  • 做企业网站需要注意什么花都区营销型网站建设
  • 平乡县网站建设平台位置北京旅游外贸网站建设
  • 建个企业网站需要多久策划书中网站制作怎么写
  • 翻译网站建设方案电子商务网站建设有什么认识
  • 网站开发维护报价单本地搭建wordpress
  • 东莞网站推广团队wordpress post link
  • iis7配置多个网站360全景预览wordpress插件
  • 手机的网站建设目标是什么意思个人做网站需要什么资料
  • 杭州画廊网站建设wordpress更新服务评论
  • Java如何实现多数据源切换
  • 某中心AI超智能单元任命首席科学家
  • 在a标签中添加点击函数
  • 绍兴做外贸网站的公司网址域名注册阿里云
  • 怎么制作网站地图gta5买办公室 网站正在建设
  • 东莞淘宝网站建设做二手车有哪些网站有哪些手续
  • 静态网站建设的流程求个网站填空题
  • 八年级上册信息书怎么做网站个人主页经典句子
  • 网站后台如何做二级建造师报名
  • 免建网站电子商务网站建设(论文
  • 云南凡科建站哪家好自己开发的软件怎么卖
  • 免费的网站程序网易企业邮箱登录入口登录入口