在编程中赋值是先把左侧对象销毁?C++中能否实现“静态”初始化容器

发表时间:2017-12-29 11:24:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《电脑是怎样运行不同语言开发的程序的?在现在 有那么多免费的好工具情况下》相关知识。本篇中小编将再为您讲解标题在编程中赋值是先把左侧对象销毁?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可以在同一台显示器上切换么》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题