当前位置:  开发笔记 > 编程语言 > 正文

指针和引用之间的低级差异是什么?

如何解决《指针和引用之间的低级差异是什么?》经验,为你挑选了2个好方法。

如果我们有这个代码:

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所说,在你验证它对你的编译器和平台是正确的之前,你不应该依赖于这种推广.



1> Crashworks..:

从理论上讲,它们可以以不同的方式实施.

在实践中,我见过的每个编译器都编译指针和对同一机器代码的引用.区别完全在语言层面.

但是,就像cdiggins所说,在你验证它对你的编译器和平台是正确的之前,你不应该依赖于这种推广.


然而,在实践中,编译器通常完全忽略引用,特别是当它们是本地人时.
有时指针,如果可以的话.

2> 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

现在乘以操作系统和优化标志,您可能会发现每个人的体验都非常缺乏.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有