我看到有人用这个
void methodA(const int*& var);
Run Code Online (Sandbox Code Playgroud)
在一个答案中,但无法理解论证的含义.
据我所知:
const int var
=> const值,无法更改
const int* var
=>指向int的指针,即const,即*var无法更改,但var可以更改
const int& var
=>引用const int,即var的值不能改变
什么const int*& var
意思,const int& *var
也有可能?
你能不能举一些例子,比如可以做什么,用什么做不了?
更新:
我不确定我是否正确思考,但我开始认为引用是作为参数传递的变量的别名,所以const int*p; methodA(p)=>这里我们将p作为const int*传递但是我们不知道这是通过值传递还是直到我们看到方法A的定义,
所以如果methodA就像这个方法A(const int*&p2)==>这里p2是p的另一个名字,即p和p2从现在开始是相同的,如果methodA(const int*p2)==>这里p2被传递作为值,即p2只是本方法的局部,
如果我错误的想法,请纠正我?如果是,我可能需要更多地研究这个问题?你能指点一些不错的参考资料吗?
更新2如果像我这样的初学者一定要多了解这件事情,你可以使用C++东方电气/ CDECL程序,我刚刚发现非常有用从这里
$ c++decl
Type `help' or `?' for help
c++decl> explain const int&* p
declare p as pointer to reference to const int
c++decl> explain const int*& p
declare p as reference to pointer to const int
Run Code Online (Sandbox Code Playgroud)
但正如每个人都指出的那样,第一个例子在C++中是不合法的.
谢谢
GMa*_*ckG 29
它是对指向int的int的指针的引用.
实际上,这里有另一篇文章有点相关.我的回答提供了一种通用算法来解决这些问题.
这个:const int& *var
没有意义,因为你不能有一个引用指针.
如果const和指针妨碍了,请记住你可以输入这些东西:
typedef int* IntPointer;
typedef const IntPointer ConstIntPointer;
void foo(ConstIntPointer&); // pass by reference
void bar(const ConstIntPointer&); // pass by const reference
void baz(ConstIntPointer); // pass by value
Run Code Online (Sandbox Code Playgroud)
可能会让它更容易阅读.
如果您需要有关C++的更多帮助,请阅读此内容.更具体地,参考文献.
作为变量的引用不占用空间:
int i; // takes sizeof(int)
int*pi = &i; // takes sizeof(int*)
int& ri = i; // takes no space.
// any operations done to ri
// are simply done to i
Run Code Online (Sandbox Code Playgroud)
引用作为参数使用指针来实现最终效果:
void foo(int& i)
{
i = 12;
}
void foo_transformed(int *i)
{
*i = 12;
}
int main()
{
int i;
foo(i); // same as:
foo_transformed(&i); // to the compiler (only sort of)
}
Run Code Online (Sandbox Code Playgroud)
所以它实际上是i
在堆栈上传递地址,因此需要sizeof(int*)
占用堆栈空间.但是不要开始考虑引用作为指针.他们不一样.
有些人发现从右到左更容易阅读.所以
const int*&
是指向const的整数的指针.
如您所知,无法更改引用,只能更改它们引用的内容.所以引用只引用一个指向const的整数的指针.由于指针不是const - 整数是const - 您可以将指针更改为指向不同的整数.
比较这个
int*const&
这是对整数的常量指针的引用.同样,引用是不可变的,在这种情况下,它是对常量指针的引用.在这种情况下你可以改变的是整数值,因为int关键字的任何一侧都没有const.
只是为了增加混淆,const int和int const是相同的.但是int const*和int*const是非常不同的.第一个是指向常量整数的指针,因此指针是可变的.第二个是指向整数的常量指针,因此整数是可变的.
希望这可以帮助!
归档时间: |
|
查看次数: |
28384 次 |
最近记录: |