码迷,mamicode.com
首页 > 编程语言 > 详细

w3周日__C++里有太多微妙到蛋疼的细节。比如构造函数也能搞这么多幺蛾子

时间:2018-06-18 01:17:21      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:必须   检查   规则   一个   标准   浅拷贝   tar   vc++   拷贝构造   

?问题提出

主要是在VC++ 2015里经常提示莫名其妙的编译错误。

 

分析一下,为什么Java里构造函数这个问题很简单:

  1. C++里对象类型不止有按引用传递,还可能拷贝传递。所以有时候得提供拷贝构造函数。(这与 重载赋值运算符= 貌似目的是一样的?都是为了能根据1个instance构造第2个instance)

            如果没显式自定义一个拷贝构造函数,那么编译器默认提供的是“浅拷贝”。所以:当成员变量含对象的指针类型时,必须重写拷贝构造函数。——> 重写几乎成了必然?

       2. C++里有初始值初始化列表 这2种东西。

       3. 默认提供的构造函数、拷贝构造函数 还能通过 “= delete” 删掉。也不知道啥情形下要这么做。(吐槽:C++把一大堆细节都用语法糖添加到语法里,使得语法相当的杂,操蛋

       4. 虽然C++规范只有一个,但是实现该规范的编译器又好几种产品:MSVC, G++, Clang……而且它们各自有一堆版本,对C++标准的支持、增补各不相同,更别说还存在一些静态代码检查的规则也不尽相同,给的提示信息我也经常看不懂……只能拿去Google然后又面临一堆语法细节,欲仙欲死。。。


? “默认初始化”

1. 如果未显式提供一个构造函数的话,那么编译器会提供一个默认的无参构造函数("default constructor")。

《C++ Primer》:

技术分享图片

 

 技术分享图片

还是百度知道好懂点:——> 设计段测试代码,debug看一下就知道了。

技术分享图片

 

 


?答案在此

 技术分享图片 C/C++变量的自动初始化

 

w3周日__C++里有太多微妙到蛋疼的细节。比如构造函数也能搞这么多幺蛾子

标签:必须   检查   规则   一个   标准   浅拷贝   tar   vc++   拷贝构造   

原文地址:https://www.cnblogs.com/nanlan2017/p/9194178.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!