当然,有些情况需要使用其中之一(例如,`operator++`需要一个引用参数),但总体而言,我发现我更喜欢使用指针(和常量指针),因为语法清楚地表明变量是以破坏性方式传递的。
例如,在以下代码中:
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
}
使用指针时,情况往往更加明显,因此在关注清晰度的API等情况下,指针比引用更合适吗?这是否意味着引用只在必要时使用(例如
operator++
)?其中一种方法是否存在性能问题?
编辑(已过时)
除了允许NULL
值和处理原始数组之外,选择似乎归结为个人偏好。我接受了下面的答案,引用了Google的C++风格指南,因为他们认为“引用可能会令人困惑,因为它们具有值语法但指针语义。”
由于需要额外的工作来清理不应为NULL的指针参数(例如add_one(0)
将调用指针版本并在运行时中断),从可维护性的角度来看,使用引用是有道理的,尽管失去了语法上的清晰度有些可惜。
add_one(a);
这段代码中哪里不清楚表明变量a
将被修改了?代码中明确写着:加一。 - GManNickGaddOneTo(...)
来简单地解决。如果这不是你想要做的事情,只需查看声明即可。 - stefan