【发布时间】:2019-01-23 06:35:42
【问题描述】:
出于学习目的,我编写了以下代码:
void Swap(const int *&Pointer1, const int *&Pointer2)
{
const int *Tmp = Pointer2;
Pointer2 = Pointer1;
Pointer1 = Tmp;
}
我对这段代码以及在这种情况下顶级/低级常量如何工作有一些疑问,有 3 个或更多“级别”。
- 显然我的引用不能是 const,否则我将无法交换指针。然而,让我们假设代码不会触及指针值(它们包含的地址):正确的语法是 const int *(const &Pointer) 还是 int * const &Pointer?我感觉后者的意思是“引用指向 const int 的 const 指针,但我不确定。如果是这种情况,编译器将忽略 const 部分,就像更简单的 const int 按值传递一样还是不会因为它在参考之下?
- 尝试使用指向 int 的指针调用此函数失败。但是,可以将一个 int 地址分配给指向 const int 的指针,如果我只是删除引用,确实不会出错。这让我认为这些引用“强制”每个 const 完美匹配。这是真的?如果是这样,有什么办法可以解决吗?
【问题讨论】:
-
知道 const 关键字应用于左边的东西可能会有所帮助,除非左边没有任何东西,在这种情况下它将应用于右边的东西,在你的例子中它适用于 int 而不是 int*。见:duramecho.com/ComputerInformation/WhyHowCppConst.html
-
为了交换
int *和const int *,你需要两个独立的函数或一个模板,因为int *的reference和一个reference i> 到const int *不相关,即使int *可以转换为const int * -
假设您能够将
int*转换为const int*&。然后你可以int* p; const int*& y = p; const int x = 0; y = &x; *p = 1;并修改一个 const 对象。 -
您可以使用this site 检查指针和常量的复杂组合的正确语法。
标签: c++ pointers reference constants pass-by-reference