[问题] sizeof 与 语法问题

楼主: tomjpsun (汤姆熊)   2016-05-23 12:11:03
问题(Question):
各位板上大大请问一下:
1. 程式输出得到 sizeof 为 1, 怎么解释?(Class 连同 align space 共计 1 byte?)
2. &Slot::inner_var 明明在第二位置,为何输出为 member = 1 ?
谢谢各位!
下列程式执行得到:
size of A = 1
&slot = 0x7fff5140c9f8
member = 1
slot.*member = 0x10e7f50bc
a.get_program() = 0x10e7f50bc
程式码(Code):(请善用置底文网页, 记得排版)
https://goo.gl/gezaKC
作者: fatrabitree (胖兔子)   2016-05-23 13:19:00
没有member variable 而size不可为0 ->1
作者: johnjohnlin (嗯?)   2016-05-23 13:19:00
1. class 内只有宣告 struct 没有实体所以不占空间2. cout member function 是什么意思啊,有什么用如果真的是第几个的话也该是 0-index
作者: loveflames (咕啾咕啾魔法阵)   2016-05-23 14:02:00
因为A是empty class,大小为1
楼主: tomjpsun (汤姆熊)   2016-05-23 16:43:00
johnjhonlin: https://goo.gl/jFJaUa L537,544 使用时机感谢大大,原来 size 1 是因为这样,问题 1. 学习了!
作者: LPH66 (-6.2598534e+18f)   2016-05-26 19:29:00
问题2: 因为 operator << (ostream&, ???) 这系列函式里没有吃 A::Slot::* 这种指标的东西, 所以编译器会找一个能够 implicit 转得过去的东西, 这里找到的是转成 bool而一个普通指标转成 bool 相当于检查是否为空指标这里显然这个指标并非空指标故转成 true, 最后就 cout 了另外两个前者是 Slot*, 后者是 cl_program (== int*)在这里由于它们能够 implicit 转成 void* 所以就是用它因此才会印出其位址出来(注意到由于成员指标和物件指标是两个东西, 后者可以转成void* 但前者不行)

Links booklink

Contact Us: admin [ a t ] ucptt.com