我知道引用是语法糖,因此代码更容易读写.
但有什么区别?
以下答案和链接摘要:
NULL),而引用总是指对象.&obj + 5).澄清一个误解:
C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:
Run Code Online (Sandbox Code Playgroud)int &ri = i;如果它没有完全优化,则分配与指针相同的存储量,并将地址
i放入该存储中.
因此,指针和引用都使用相同数量的内存.
作为基本规则,
有趣的读物:
我理解指针与引用的语法和一般语义,但是我应该如何决定何时在API中使用引用或指针?或多或少?
当然,有些情况需要一个或另一个(operator++需要一个引用参数),但总的来说,我发现我更喜欢使用指针(和const指针),因为语法清楚地表明变量是破坏性地传递的.
例如,在以下代码中:
void add_one(int& n) { n += 1; }
void add_one(int* const n) { *n += 1; }
int main() {
int a = 0;
add_one(a); // Not clear that a may be modified
add_one(&a); // 'a' is clearly being passed destructively
}
Run Code Online (Sandbox Code Playgroud)
使用指针,它总是(更加)明显地发生了什么,所以对于API等,清晰度是一个大问题,指针不是比引用更合适?这是否意味着只应在必要时使用引用(例如operator++)?是否有任何性能问题?
编辑(已完成):
除了允许NULL值和处理原始数组之外,似乎选择归结为个人偏好.我已经接受了下面引用Google的C++样式指南的答案,因为它们提出了"引用可能令人困惑,因为它们具有值语法但指针语义"的观点.
由于清理不应该为NULL的指针参数所需的额外工作(例如,add_one(0)将调用指针版本并在运行时中断),从可维护性的角度来看,使用必须存在对象的引用是有意义的,尽管这是一种耻辱失去句法的清晰度.
在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) 简短版本:
在现代C++中使用非智能指针是否有任何可接受的理由?
长版:
我们有一个包含大量旧C++代码的庞大产品,现在我们正在尝试将其重构为现代C++时代.除了所有旧式代码之外,还有大量的指针传递(主要是使用SAL注释来提供一些安全感),我想知道是否应该将它们全部更改为智能指针,或者可能将其中的一些保留为智能指针. ?
试图转换其中的一些代码,我最终得到了一个代码,它可以简单地论证使用智能指针.
所以问题是:是否存在使用智能指针这样的事情?
换句话说:这些天非智能指针是否有可接受的场景?