gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:15 25 4
gpt4 key购买 nike

当我打算更改函数内的指针值时,我会传递 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com