我正在阅读,我看到以下代码:
template <>
inline bool is_empty(const char* const& x)
{
return x==0 || *x==0;
}
Run Code Online (Sandbox Code Playgroud)
什么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
}
Run Code Online (Sandbox Code Playgroud)
它仅适用于f(&a)
和f(&j)
.
究竟const char* const& x
是什么意思?
Mar*_*ler 10
让我们把它分开:
尾随&
意味着这是对类型的引用.
const char
是指向的类型
* const
表示指针是常量
所以,这是对const char的const指针的引用.你不能改变char
它所指向的(除非你抛弃它constness
),你不能改变指针(即使它指向别的东西).指针通过引用传递,因此不会发生复制.
指针引用正如它所说的那样,是对指针的引用.
考虑我们对参考文献的了解.C++中的引用是一个变量,它引用其他地方的现有变量:
int x = 1;
int &y = x; // <-- y refers to x. Any changes to y will update x as well, and vice versa.
Run Code Online (Sandbox Code Playgroud)
还要考虑我们对指针的了解.指针指向内存中的另一个对象:
int *m = new int(5); // Pointer to an allocated integer in memory.
int *n = m; // Pointer to the same memory.
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下你实际拥有的是对指针的引用!
int *m = new int(5); // Pointer to an allocated integer in memory.
int *ptr = m; // Pointer to m.
int *&ptrRef = ptr; // Reference to ptr.
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,更改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"
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我们传递myPtr
给ChangePointer
引用,以便它可以被函数修改.如果我们没有通过引用传递,则函数内部所做的任何更改都将丢失.
在您的情况下,您正在传递对const指针的引用.这大致相当于:
DoStuff(const Object &myObject);
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你传递一个指针,而不是一个对象.
但是,通过引用传递const指针似乎有点多余.指针不能被改变(它是const),并且通过引用传递指针没有任何好处(通过引用传递对于像指针和整数这样的小对象的传递值并不是更有效).我不想猜测为什么它会在你的情况下完成.
归档时间: |
|
查看次数: |
8703 次 |
最近记录: |