首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在引用(T&)和const指针(T* const)之间进行选择

在引用(T&)和const指针(T* const)之间进行选择
EN

Stack Overflow用户
提问于 2011-09-29 18:07:03
回答 4查看 270关注 0票数 7

是否有任何合理的用例,应该在引用时使用const指针?

代码语言:javascript
复制
T obj;
T &r = obj;  // style-1
T* const p = &obj; // style-2

这两种样式都可以用于相同的目的。我总是喜欢代码中的第一种样式,并将后一种样式视为不推荐的。然而,我仍然在想,是否错过了第二种风格更好的用例?

编辑:不局限于上面的例子,我从更广泛的意义上讲,

代码语言:javascript
复制
void foo (T& r); // style-1
void foo (T* const p); // style-2

我从很少的答案中看到,style-2允许传递null。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-29 18:11:46

const指针(T* const)可以是NULL,这在向函数传递参数或从函数返回值时非常有用。例如,如果您有一个搜索函数,您可能希望它在没有找到任何东西的情况下返回NULL。如果它返回引用类型,则不能这样做。

票数 5
EN

Stack Overflow用户

发布于 2011-09-29 18:17:51

让我冒着危险出去。因为您显式地说了"const指针“,所以我假设您不是在谈论函数参数,甚至不是函数返回值。对于通过复制传递的函数参数,一致性是不相关的实现细节:

代码语言:javascript
复制
void foo(T *);          // declaration

void foo(T * const pt)  // implementation,
{ /* ... */ }           // pt is const inside the body (who cares?)

因此,想到的唯一的用例是您需要在自己的代码中的某个地方创建一个别名。那样的话,我总是更喜欢参考资料。比较:

代码语言:javascript
复制
for (auto it = box.begin(); it != box.end(); ++it)
{
  T & trinket = *it;     // nice
  T * const ptr = &*it;  // wtpf?

  // ...
}

既然你编辑了你的问题:函数参数显然是不同的。

代码语言:javascript
复制
void foo(T &);
void bar(T *);

foo中,可以保证有一个可行的、可变的对象引用;在bar中,您必须检查指针是否为空(给出了可选参数的概念)。从这个意义上说,T&T*并没有真正的可比性。

票数 2
EN

Stack Overflow用户

发布于 2011-09-29 18:11:10

对于函数参数,我更喜欢指针而不是引用,因为我可以在调用站点判断参数是out参数。如果函数参数是const引用,那么我更喜欢引用。

另一个很大的区别是r不能是空的,所以如果您需要它,那么您就需要样式-2。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7601524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档