作者alpho (阿否)
看板C_and_CPP
标题[问题] 物件的定义 .. function为何不是物件?
时间Thu Apr 5 12:33:32 2018
编译器 : VC 13
问题(Question):
我在找关於"物件的定义"时候,有看到2014草案
内容是说
An object is a region of storage.
[ Note: A function is not an object, regardless of whether or not it occupies storage in the way that objects do.
—end note ]
这样。
google之後,得到了这一篇:
https://stackoverflow.com/questions/43971298/why-is-a-function-not-an-object
不过我实际尝试之後,用int函式指标纪录一个函式,然後用()转成void、再转回(int*)()
值是不变的?
当然回到本来的问题,连结内文提到:
C++ requires that you can convert a pointer to any object type into a pointer
to void,..
略,就是指标转过去在转回来的值应该要是一样的,这部份也是定义吗?
原文下面证明函式不是物件就是用这个叙述去讲,希望以下我没理解错
原文:
That's not true with a pointer to a function though--if you take a pointer to
a function, convert it to void *, and then convert it back to a pointer to a
function, you may lose some information in the process.
我发文和测试的电脑是不同台,现在手边电脑也没办法测试。
大致上就是用()硬转型态去测。
在原本的电脑是可以编译和执行的,然後四个输出的结果会一样。
本来整个问题就是"物件的定义",然後有看到 应该是在14草案的3.9.2-3 没记错位置的话,说到:参考、函式和void型态不是物件。
参考很明显,void和函式就比较微妙了。
为了厘清观念,才在板上发问这样
谢谢各位。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.223.65.196
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1522902817.A.688.html
1F:推 LPH66: 对 C/C++ 来说, 函式指标和物件指标是两种东西 04/05 12:43
2F:→ LPH66: 而 void * 是一个物件指标, 拿它去指函式指标可能会有问题 04/05 12:43
3F:→ LPH66: 至於之所以为什麽要分开, 你贴的那篇 SO 文的回答後半有提 04/05 12:47
4F:→ LPH66: 是存在这种架构其中函式指标跟物件指标是完全不同的两回事 04/05 12:48
5F:→ LPH66: (连指标大小都可能不一样) 因此互转的过程中就会掉东西 04/05 12:48
6F:→ LPH66: 极端状况例如哈佛架构里程式和资料是物理上分开的 04/05 12:51
7F:→ LPH66: 它们的指标可以很不一样, 因此也就没有互转这回事 04/05 12:54