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