关于<深度探索C++对象模型>书中的问题

ztfans 2006-11-10 01:45:29
最近苦读此书,发现书中所说的有些东西说得不太严谨,前后不太一致,比如P40页第13行说到:

“对于class X,如果没有任何user declared constructor,那么会有一个default constructor被暗中(implicit)声明出来……一个被暗中声明出来的default constructor将是一个trivial(浅薄而无能,没啥用的)constructor……”

在这之后,又列举了四种情况下的default constructor会被视为nontrivial

我想说的是,既然有些情况下暗中声明出来的default constructor是nontrivial的,那么为什么在这之前又笼统的说“一个被暗中声明出来的default constructor将是一个trivial(浅薄而无能,没啥用的)constructor”呢?不是有些前后矛盾吗?
...全文
242 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztfans 2006-11-11
  • 打赏
  • 举报
回复
有没有发表不同意见的?
zuozhuwu 2006-11-10
  • 打赏
  • 举报
回复
其实楼主是没有理解trivial和nontrivial的含义:
比如一个类,他的数据类型是int 或者 char 这种简单的内置类型。那么这个类就不需要调用构造函数,直接bitwise copy就足够了。此时称构造函数为trivial(没有用的),即不会合成构造函数。
接着书中提到有四种情况必须要合成缺省的构造函数(如果没有提供的话),此时的这种构造函数成为是nontrivial(有用的)
ps:我看过候捷翻译的,简直不知道他说的是什么东西。实在看不下去了,看英文版的,才弄了个大概。建议直接看英文版的。
ztfans 2006-11-10
  • 打赏
  • 举报
回复
to jixingzhong(瞌睡虫·星辰)
谢谢你的解答,但你所说的
“说 nontrivial ,
是因为 在一些情况下, 这个 什么都不做的 constructor 也是必须的, 否则无法构造实例对象。

虽然他是 什么都不干的, 但是没有它又是不行的 !”

在四种情况下,并不是像你所说的“什么都不干的”啊!在这些四种情况下,暗中产生的那个default constructor里含必要的代码,调用成员类对象的default constructor或基类的default constructor以及其他。
飞哥 2006-11-10
  • 打赏
  • 举报
回复
所说的应该是不是相同的东西·
jixingzhong 2006-11-10
  • 打赏
  • 举报
回复
文中的 trivial , 是因为这个 默认的/自动生成的 constructor 是什么都不干的,
他只是因为是一个空的 constructor ,没有做任何事情 ~~

说 nontrivial ,
是因为 在一些情况下, 这个 什么都不做的 constructor 也是必须的, 否则无法构造实例对象。

虽然他是 什么都不干的, 但是没有它又是不行的 !

==============
文章嘛, 都是带有个人理解的,
楼主关键是把握 这个根本的问题,
至于你认为是否是 nontrivial 还是 trivial ,
都无关紧要!
ztfans 2006-11-10
  • 打赏
  • 举报
回复
楼上的说的是什么意思?
这和“默认运算重载函数”、“拷贝构造函数”根本无关啊!
guochun 2006-11-10
  • 打赏
  • 举报
回复
前后是不同的default constructor
一个被暗中声明出来的default constructor将是一个trivial 是无参constructor
四种情况下的default constructor会被视为nontrivial中我觉得不应该写为default constructor了,这里面包含了默认运算符重载函数,一类对象为参数构造函数
ztfans 2006-11-10
  • 打赏
  • 举报
回复
up

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧