• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++大括号初始化和大括号赋值的区别

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

C++中我们可以平时使用vector等容器时一般这样初始化:vector<int> p={1,2,3};

其中{1,2,3}是一种叫initializer_list的类型,是C++11新出的

除了可以用来初始化容器,

还可以像python一样用:

for x in [1,2,3]:
    print(x)
 1 #include <iostream>
 2 
 3 int main(int argc, char **argv)
 4 {
 5     for(auto n : {1,2,3,4,5,6})
 6     {
 7         std::cout<<n<<std::endl;
 8     }
 9 
10 }

 

 

当然这篇博客主要是想记录一下声明直接初始化和声明后赋值的区别:

 

声明时直接初始化:

vector<int> p={1,2,3};

这直接调用相应的构造函数。

 

声明之后再赋值:

vector<int> p;
p={1,2,3};

先调用默认构造函数,再调用拷贝构造函数(赋值运算重载符)。

 

自己写个模板类,运行一下试试:

 1 template<typename T> class MyClass{
 2     public:
 3     vector<T> data;
 4     MyClass(initializer_list<T> li){data=li;cout<<"{}"<<endl;}
 5     MyClass(){}
 6     MyClass& operator=(initializer_list<T> li){data=li;cout<<"=="<<endl;}
 7 };
 8 
 9 
10 int main() {
11     MyClass<int> x={1,2,3};
12     MyClass<int> y;
13     y={2,3,4};
14     getchar();
15     return 0;
16 }

 

结果:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++练习|单链表的创建与输出(结构体格式)发布时间:2022-07-13
下一篇:
c#贪吃蛇发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap