指向引用的指针
Pointer to reference
我正在阅读,我看到了以下代码:
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
实际上是什么意思?
cdecl是一个有用的在线工具,可以帮助初学者习惯复杂的声明。
插入const char* const& i
返回:
声明i为指向const char 的const指针的引用
声明的含义现在应该很明显了。
指针引用就是指针引用。
考虑一下我们对参考文献的了解。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 char
是指向的类型 -
* const
表示指针为常数
因此,这是对const字符的const指针的引用。您不能更改它所指向的char
(除非丢弃constness
),也不能更改指针(即使其指向其他对象)。指针是通过引用传递的,因此不会发生复制。
其他答案主要涉及指针引用的语义。
但如果您有疑问:它是对指针的引用,还是指向引用?这可能令人困惑!但是,C++不允许指针指向引用
指针存储对象的地址,引用是而不是对象,因此不能有任何指向引用的指针。
它应该转换为"对常量指针的引用,指向常量字符"。这意味着被引用的指针不能被分配一个新的目标地址(指向),并且它引用的字符串不能被修改。
评论后编辑。不过,后果应该保持不变。
- 如何使用基类指针引用派生类成员
- 将常量指针引用绑定到非常量指针
- 如果非动态变量被指针引用,何时超出范围?
- 转换指针引用的字符串
- 指针引用的生存期(以 C++为单位)
- 从 unique_ptr::get 发送指针作为指针引用进入函数
- 指针/引用的 CLion 格式
- 使用模板专用化来比较指针引用
- 如何保存指向抽象基类的指针/引用,但在 c++ 中仍然可以复制
- C++初始化指针/引用/复制细微差别
- 用数组或指针引用函数?
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 强制转换为指针引用是否会导致未定义的行为
- 访问由 void 指针引用的结构的成员
- C 为什么当先前的步骤引发异常时,std :: shared_ptr的指针引用会被破坏
- 动态指针引用数组由三元运算符返回值,但有异常
- 悬空指向 int 和 char* 常量的指针/引用
- C++ 二维数组和指针引用
- 通过使用指针/引用,在C++中使用向量加快计算速度
- C++非类型模板模板到函数指针/引用