c++ - 我什么时候应该传递 "T* const&"类型的指针?

标签 c++ pointers constants pass-by-reference

当我打算更改函数内的指针值时,我会传递 T*& 指针:

void foo(char *&p)
{
  p = (b == true)? new char[10] : 0;
}

但我无法了解 T* const& 类指针的用例(因为该指针不可更改)?我的意思是为什么我不应该简单地传递 T* const

void foo(char* const &p);  // p is not changeable
void foo(char* const p);   // p is not changeable

最佳答案

如果指针对象的值可能会被函数外部的某些东西改变,并且您希望能够观察到值的变化,则可以使用 T* const & 作为参数指针对象,或者如果您想存储指向指针对象的引用或指针以供以后读取。

T* 参数(相当于作为函数参数的 T* const)只是给你一个指针对象的拷贝,它的值的快照传递给您的函数。

void foo( char* const& ptr )
{
    char* p1 = ptr; // initial value
    global_fn();    // ptr might be changed
    char* p2 = ptr; // new value of ptr
}

对比

void foo2( char* ptr )
{
    char* p1 = ptr; // initial value
    global_fn();    // ptr can't be changed, it's local to this function
    char* p2 = ptr; // will be the same as p1
}

从技术上讲,即使是函数本身也可能会更改传递给它的引用的指针的值。

例如

char* p;

std::ptrdiff_t foo( char* const& ptr )
{
    ++p;
    return p - ptr; // returns 0, would return 1 if the parameter was by value
}

int main()
{
    char test[] = "Hello, world!";
    p = test;
    foo( p );
}

关于c++ - 我什么时候应该传递 "T* const&"类型的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6635882/

相关文章:

c++ - 在局部作用域中使用 extern 取消全局变量的阴影是否有效?

c++ - 使用 OpenSSL 1.1 生成 EC key 时仅使用 1 个 EVP_PKEY

C 程序在 do while 循环中崩溃

c - 如何给另一个指针赋值

c++ - 在构造函数中分配给常量变量?

c++ - 如何使用 cpp 将宏转换为字符串?

c++ - 基于插入顺序的第一个最重复的单词

java - 使用来自 JNI 的 jvm.h

c - 指针数组的问题

javascript - 如何在javascript中创建常量