我知道引用是语法糖,因此代码更容易读写.
但有什么区别?
以下答案和链接摘要:
NULL
),而引用总是指对象.&obj + 5
).澄清一个误解:
C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:
Run Code Online (Sandbox Code Playgroud)int &ri = i;
如果它没有完全优化,则分配与指针相同的存储量,并将地址
i
放入该存储中.
因此,指针和引用都使用相同数量的内存.
作为基本规则,
有趣的读物:
在给函数提供原始变量时,最好的做法是:
unsigned long x = 4;
void func1(unsigned long& val) {
val = 5;
}
func1(x);
Run Code Online (Sandbox Code Playgroud)
要么:
void func2(unsigned long* val) {
*val = 5;
}
func2(&x);
Run Code Online (Sandbox Code Playgroud)
IOW:有没有理由选择一个而不是另一个?
在C++中通过引用传递指针有什么好处?
最近,我看到一些例子选择通过指针传递函数参数而不是通过引用传递.这样做有好处吗?
例:
func(SPRITE *x);
Run Code Online (Sandbox Code Playgroud)
随叫随到
func(&mySprite);
Run Code Online (Sandbox Code Playgroud)
与
func(SPRITE &x);
Run Code Online (Sandbox Code Playgroud)
随叫随到
func(mySprite);
Run Code Online (Sandbox Code Playgroud) char *str = "Hello";
char *ptr = str;
char *&rptr = str;
Run Code Online (Sandbox Code Playgroud)
ptr和rptr有什么区别?我理解rptr是一个指针的引用(理论上),但它与ptr的实现方式有何不同?
C++中的引用是否使用指针实现?
以下两种参数类型有什么区别?第一个接受一个指针,它实际上是一个内存地址,第二个也是一个内存地址?
foo(float& bar)
{
// do stuff
}
foo(float* bar)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
你能不能同时打电话:
float pow = 3.0f;
foo(&pow);
Run Code Online (Sandbox Code Playgroud)
要么
float* pow = 3.0f;
foo(pow);
Run Code Online (Sandbox Code Playgroud)