之前发过的帖子时间久了没人关注了,这里重发下:
- C/C++ code
void f1( const int *& t){ }void f2( const int *const& t){ }int _tmain(int argc, _TCHAR* argv[]){ int* p; f1(p); //不能将参数 1 从“int *”转换为“const int *& f2(p);//正常编译 return 0;}
问题是f1不能正常编译?而f2可以呢?
像下面这样,指向const类型的指针不是可以指向非指向const类型的吗?
C/C++ code
int*pp1;
------------------------------------------
有位大侠说“非const 指针是可以转换成const 指针,但是转换过来的结果是一个右值.
一个右值可以绑定到const 的引用上,不能绑定到非const 引用.故1不行,2行.”
但是,若转换结果是右值的话对于vs2010的右值引用为什么也不行呢? 望指教~~谢谢!
- C/C++ code
void f3(const int*&&){ }int* p;f3(p);//错误
------解决方案--------------------
首先这里的p并非是什么右值。再者int*const&这样的写法 如果用typedef你也许更清楚些。
typedef int* INT_PTR;
INT_PTR p1;
INT_PTR const &ref=p1;
而 对于 const int*&来说 const 用来限制 指针所指对象,而非限制引用。而你认为int *const &ref;的const限制的是指针本身的指向 我是不太同意的。我的观点是const作用于引用。就是说你不能通过引用来修改指针的指向。这点在效果上和你说的int*const ptr;是一样的。但是理解上不同。
于是这样的问题就有点类似我前面提到的例子了。
如果更简化这个问题 去掉指针 那么就变成了 int p ; const int&ref=p;非const变量是可以由const 引用绑定的。
------解决方案--------------------
------解决方案--------------------