是否有任何合理的用例,应该在引用时使用const指针?
T obj;
T &r = obj; // style-1
T* const p = &obj; // style-2这两种样式都可以用于相同的目的。我总是喜欢代码中的第一种样式,并将后一种样式视为不推荐的。然而,我仍然在想,是否错过了第二种风格更好的用例?
编辑:不局限于上面的例子,我从更广泛的意义上讲,
void foo (T& r); // style-1
void foo (T* const p); // style-2我从很少的答案中看到,style-2允许传递null。
发布于 2011-09-29 18:11:46
const指针(T* const)可以是NULL,这在向函数传递参数或从函数返回值时非常有用。例如,如果您有一个搜索函数,您可能希望它在没有找到任何东西的情况下返回NULL。如果它返回引用类型,则不能这样做。
发布于 2011-09-29 18:17:51
让我冒着危险出去。因为您显式地说了"const指针“,所以我假设您不是在谈论函数参数,甚至不是函数返回值。对于通过复制传递的函数参数,一致性是不相关的实现细节:
void foo(T *); // declaration
void foo(T * const pt) // implementation,
{ /* ... */ } // pt is const inside the body (who cares?)因此,想到的唯一的用例是您需要在自己的代码中的某个地方创建一个别名。那样的话,我总是更喜欢参考资料。比较:
for (auto it = box.begin(); it != box.end(); ++it)
{
T & trinket = *it; // nice
T * const ptr = &*it; // wtpf?
// ...
}既然你编辑了你的问题:函数参数显然是不同的。
void foo(T &);
void bar(T *);在foo中,可以保证有一个可行的、可变的对象引用;在bar中,您必须检查指针是否为空(给出了可选参数的概念)。从这个意义上说,T&和T*并没有真正的可比性。
发布于 2011-09-29 18:11:10
对于函数参数,我更喜欢指针而不是引用,因为我可以在调用站点判断参数是out参数。如果函数参数是const引用,那么我更喜欢引用。
另一个很大的区别是r不能是空的,所以如果您需要它,那么您就需要样式-2。
https://stackoverflow.com/questions/7601524
复制相似问题