【发布时间】:2022-07-14 22:19:03
【问题描述】:
由于引用 (<i>some-type</i>&) 表现为常量指针 (<i>some-type</i> * const),因此通过“对指针的常量引用”参数 (<i>some-type</i> * const&) 传递参数似乎有点多余,因为
- 如果参数是
<i>some-type</i> *- 我正在复制它,
- 我无法编辑原件,因为我只是不处理它;
- 如果参数是
<i>some-type</i> * const&- 我没有抄袭,
- 我无法编辑原件,因为我将其作为
const实体保存。
所以在某种程度上两者之间的唯一区别是前者会产生副本,而后者不会。
反过来,这意味着这种差异对于std::shared_ptrs 可能相对重要,它可能比原始指针和std::unique_ptrs 更大。
但是(如果它们“重”,则通过 const& 传递 std::shared_ptrs)是通过 const& 传递指针参数的唯一用例吗?
【问题讨论】:
-
一个引用不一定在底层实现为一个常量指针。一些编译器可能将其用作实现细节,但相同的编译器也可能使用不依赖于该方法的其他机制。
-
指针和智能指针是不同的东西。你问的是哪个?
-
第一句话真的很触发
-
不限于指针,您的问题也可能适用于
int和const int&。 -
TLDR 没有引用不是指针。实际上,您应该首先查看 STL 数据类型(容器),然后查看非原始指针,例如 std::unique_ptr(用于手动分配的内存或多态用例)。仅当您非常确定(可选或多态对象)的生命周期时才使用原始指针。也许您应该阅读:isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines 并查找任何指针。
标签: c++ pointers reference raw-pointer pass-by-const-reference