如果我们有这个代码:
int foo=100; int& reference = foo; int* pointer = &reference;
参考数据和指针数据之间没有实际的二进制差异.(它们都包含记忆中的位置foo
)
第2部分
那么指针和引用之间的所有其他差异(这里讨论)会在哪里出现?编译器是执行它们还是它们在可组合级别上实际上是不同类型的变量?换句话说,下面是否生成相同的汇编语言?
foo=100; int& reference=foo; reference=5; foo=100; int* pointer=&foo; *pointer=5;
Crashworks.. 18
从理论上讲,它们可以以不同的方式实施.
在实践中,我见过的每个编译器都编译指针和对同一机器代码的引用.区别完全在语言层面.
但是,就像cdiggins所说,在你验证它对你的编译器和平台是正确的之前,你不应该依赖于这种推广.
从理论上讲,它们可以以不同的方式实施.
在实践中,我见过的每个编译器都编译指针和对同一机器代码的引用.区别完全在语言层面.
但是,就像cdiggins所说,在你验证它对你的编译器和平台是正确的之前,你不应该依赖于这种推广.
C++代码与编译器生成的机器代码之间的关系绝对没有可靠性.
有人说"根据我的经验......等等" 但这比你意识到的更不可靠.在所有可能的编译器/体系结构组合的任何实质性横截面中,没有多少人具有实际经验.[编辑:我认为Crashworks证明我错了.:-)]
考虑以下C++编译器列表:
C++ Builder
Turbo C++ Explorer
C++编译器
Borland C++
适用于DOS的Turbo C++
铛
Comeau C/C++
舒适的编译开发系统
数字火星
DJGPP
EDGE ARM C/C++
MinGW的
GCC C++(G ++)
HP aC++
英特尔C++编译器
Microtec公司
多
打开Watcom
Open64
PathScale公司
PGI工作站
ProDev WorkShop
RealView C/C++编译器(armcc)
SAS/C C++
太阳工作室
TenDRA
VectorC
Visual C++
VisualAge C++
XL C/C++
现在将此列表乘以以下简短的机器架构列表:
臂
Atmel AVR
Blackfin处理器
HC12
H8/300
IA-32(x86)
X86-64
IA-64
摩托罗拉68000
MIPS
PA-RISC
PDP-11
PowerPC的
R8C/M16C/M32C
SPU
系统/ 390/z系列
的SuperH
SPARC
VAX
A29K
弧
ETRAX CRIS
D30V
DSP16xx
FR-30
FR-V
英特尔i960
IP2000
M32R
68HC11
MCORE
MMIX
MN10200
MN10300
摩托罗拉88000
NS32K
欢蹦乱跳
Stormy16
V850
Xtensa可
AVR32
现在乘以操作系统和优化标志,您可能会发现每个人的体验都非常缺乏.