引用指针

新手上路,请多包涵

我正在阅读,我看到了以下代码:

 template <>
inline bool is_empty(const char* const& x)
{
    return x==0 || *x==0;
}

const char* const& x 是什么意思?

我尝试了以下代码来理解它:

 void f(const char* const& x)
{
    // whatever
}

void main()
{
    char a = 'z';
    char &j = a;
    f(a);//error
    f(*a);//error
    f(&a);//fine
    f(j);//error
    f(&j);//fine
    f('z');//error
}

它仅适用于 f(&a)f(&j)

const char* const& x 是什么意思?

原文由 MEMS 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 797
2 个回答

指针引用正是它所说的,对指针的引用。

考虑一下我们对引用的了解。 C++ 中的引用是指在别处引用现有变量的变量:

 int x = 1;
int &y = x;    // <-- y refers to x. Any changes to y will update x as well, and vice versa.

还要考虑我们对指针的了解。指针指向内存中的另一个对象:

 int *m = new int(5);   // Pointer to an allocated integer in memory.
int *n = m;            // Pointer to the same memory.

因此,在您的情况下,您实际上拥有的是对指针的引用!

 int *m = new int(5);   // Pointer to an allocated integer in memory.
int *ptr = m;          // Pointer to m.
int *&ptrRef = ptr;    // Reference to ptr.

在上面的示例中,更改 ptrRef 会更新 _指针_,但不会更新值。

这是一个更完整的示例:

 int *myPtr = new int(5);   // myPtr points to an integer.

...

void ChangePointer(int *&ptr)
{
    delete ptr;
    ptr = new int(6);
}

...

std::cout << *myPtr << std::endl;  // <-- Output "5"
ChangePointer(myPtr);
std::cout << *myPtr << std::endl;  // <-- Output "6"

在上面的示例中,我们通过引用将 myPtr 传递给 ChangePointer 以便可以通过函数对其进行修改。如果我们不通过引用传递,函数内部所做的任何更改都将丢失。

在您的情况下,您正在传递对 const 指针的引用。这大约相当于:

 DoStuff(const Object &myObject);

在您的情况下,您传递的是一个指针,而不是一个对象。

不过,通过引用传递 const 指针似乎有点多余。指针不能更改(它是 const),并且通过引用传递指针没有任何好处(对于像指针和整数这样的小对象,通过引用传递并不比按值传递更有效)。我不想猜测为什么在你的情况下这样做。

原文由 Karl Nicoll 发布,翻译遵循 CC BY-SA 3.0 许可协议

cdecl 是一个有用的在线工具,可以帮助初学者习惯复杂的声明。

插入 const char* const& i 返回:

将 i 声明为对 const 指向 const char 的指针的引用

声明的含义现在应该很明显了。

原文由 Vittorio Romeo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏