作者tomjpsun (汤姆熊)
看板C_and_CPP
标题[问题] sizeof 与 语法问题
时间Mon May 23 12:11:03 2016
问题(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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.226.107.60
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1463976665.A.167.html
1F:推 fatrabitree: 没有member variable 而size不可为0 ->1 05/23 13:19
2F:推 johnjohnlin: 1. class 内只有宣告 struct 没有实体所以不占空间 05/23 13:19
3F:推 johnjohnlin: 2. cout member function 是什麽意思啊,有什麽用 05/23 13:22
4F:→ johnjohnlin: 如果真的是第几个的话也该是 0-index 05/23 13:22
5F:推 loveflames: 因为A是empty class,大小为1 05/23 14:02
7F:→ tomjpsun: 感谢大大,原来 size 1 是因为这样,问题 1. 学习了! 05/23 16:46
8F:→ tomjpsun: 跪求问题2.的解释... 05/25 17:31
9F:推 LPH66: 问题2: 因为 operator << (ostream&, ???) 这系列函式里 05/26 19:29
10F:→ LPH66: 没有吃 A::Slot::* 这种指标的东西, 所以编译器会找一个 05/26 19:29
11F:→ LPH66: 能够 implicit 转得过去的东西, 这里找到的是转成 bool 05/26 19:29
12F:→ LPH66: 而一个普通指标转成 bool 相当於检查是否为空指标 05/26 19:30
13F:→ LPH66: 这里显然这个指标并非空指标故转成 true, 最後就 cout 了 05/26 19:30
14F:→ LPH66: 另外两个前者是 Slot*, 後者是 cl_program (== int*) 05/26 19:32
15F:→ LPH66: 在这里由於它们能够 implicit 转成 void* 所以就是用它 05/26 19:32
16F:→ LPH66: 因此才会印出其位址出来 05/26 19:32
17F:→ LPH66: (注意到由於成员指标和物件指标是两个东西, 後者可以转成 05/26 19:33
18F:→ LPH66: void* 但前者不行) 05/26 19:33