Gor*_*son 11 c++ assembly pointers reference
如果我们有这个代码:
int foo=100;
int& reference = foo;
int* pointer = &reference;
Run Code Online (Sandbox Code Playgroud)
参考数据和指针数据之间没有实际的二进制差异.(它们都包含记忆中的位置foo)
第2部分
那么指针和引用之间的所有其他差异(这里讨论)会在哪里出现?编译器是执行它们还是它们在可组合级别上实际上是不同类型的变量?换句话说,下面是否生成相同的汇编语言?
foo=100;
int& reference=foo;
reference=5;
foo=100;
int* pointer=&foo;
*pointer=5;
Run Code Online (Sandbox Code Playgroud)
Cra*_*rks 18
从理论上讲,它们可以以不同的方式实施.
在实践中,我见过的每个编译器都编译指针和对同一机器代码的引用.区别完全在语言层面.
但是,就像cdiggins所说,在你验证它对你的编译器和平台是正确的之前,你不应该依赖于这种推广.
cdi*_*ins 10
C++代码与编译器生成的机器代码之间的关系绝对没有可靠性.
有人说"根据我的经验......等等" 但这比你意识到的更不可靠.在所有可能的编译器/体系结构组合的任何实质性横截面中,没有多少人具有实际经验.[编辑:我认为Crashworks证明我错了.:-)]
考虑以下C++编译器列表:
现在将此列表乘以以下简短的机器架构列表:
现在乘以操作系统和优化标志,您可能会发现每个人的体验都非常缺乏.