在上一篇文章中,小编为您详细介绍了关于《电脑是怎样运行不同语言开发的程序的?在现在 有那么多免费的好工具情况下》相关知识。本篇中小编将再为您讲解标题在编程中赋值是先把左侧对象销毁?C++中能否实现“静态”初始化容器。
a=a,a已经先被销毁了,为什么还能完成赋值
对于有 non-trivial destructor 的类来说,self-assignment 是要注要的。
如果写成这样的 copy assignment,是不用理会 self-assignment 的,但会有额外的 copy/move constructor 调用消耗:
T // resources are exchanged between *this and arg return *this;} // destructor of arg is called to release the resources formerly held by *this
如果原来的资源还可再利用,就可以写成这种形式:
T // destroy storage in this /* reset size to zero and mArray to null, in case allocation throws */ mArray = new int[/*size*/]; // create storage in this } /* copy data from other\'s storage to this storage */ } return *this;}对于传进 const T& 的 assignment operator,需要检测 self-assignment。
例子来自 operator overloading
突然想到了这个,模板元 编译的时候计算斐波那契数列
template struct Fibonacci { enum { result = ① }; };template struct Fibonacci { enum { result = ① }; };template struct Fibonacci { enum { result = Fibonacci::result + Fibonacci::result }; };
直接写不可以,编译期初始化更没希望
但是如果想达到①个类似于C#里面第①次调用前初始化的效果,间接写还是有办法的,但我不知道下面这样写是不是有危险,反正我的项目里这样做了。大意是这样的
static unordered_map& bar()
{
static unordered_map baaar;
return bar;
}
class initializer
{
initializer()
{
..干①些初始化baar的事情;;;
}
}
static initializer bar_initi;
编后语:关于《在编程中赋值是先把左侧对象销毁?C++中能否实现“静态”初始化容器》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《PS4能玩PS3的游戏作品么5?ps3和ps4可以在同一台显示器上切换么》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器