i******t 发帖数: 22541 | 1 reference to pointer问题
void f(const int * & p)
{
int i =0;
i = p[0];
cout<< i<
system("PAUSE");
}
int main()
{
int * p =new int[1];
p[0] =102;
f(p);
return 1;
}
这样编译不过去
error C2664: 'f' : cannot convert parameter 1 from 'int *' to 'const int *&'
如果吧函数改一下就可以了void f( int * & p) 或者void f( int * p)
都没问题
奇怪为啥最开始那个不行呢? |
r*******y 发帖数: 1081 | 2 我试了一下, 用 const int * const & 也行。
不过还是不明白。
【在 i******t 的大作中提到】 : reference to pointer问题 : void f(const int * & p) : { : int i =0; : i = p[0]; : cout<< i<: system("PAUSE"); : } : int main() : {
|
r*******e 发帖数: 7583 | 3 按理说 const & 跟 & 是等价的
因为引用一旦初始化就不能被改变了,本身就是const
【在 r*******y 的大作中提到】 : 我试了一下, 用 const int * const & 也行。 : 不过还是不明白。
|
i******s 发帖数: 301 | 4 定义时用template就没问题。
我怀疑是C++ compiler 在解析时优先考虑的一个const int *的指针的引用,而不是一
个const (int *指针的引用),解析顺序问题。
template
void f(const T & p)
...
【在 i******t 的大作中提到】 : reference to pointer问题 : void f(const int * & p) : { : int i =0; : i = p[0]; : cout<< i<: system("PAUSE"); : } : int main() : {
|
n*******0 发帖数: 2002 | 5 const int * &p 里面的const 是修饰int 的。所以开始的定义说的是p指向的是const
int,也就是只能读不能改的int。由于main里面p定义成的是一个内容是int 的数组,
内容是可改的,所以调用f的时候编译器就报错了。
俺的理解。。。
【在 i******t 的大作中提到】 : reference to pointer问题 : void f(const int * & p) : { : int i =0; : i = p[0]; : cout<< i<: system("PAUSE"); : } : int main() : {
|
d*********i 发帖数: 628 | |
i******t 发帖数: 22541 | 7 i don't think so.
My friend can compile without error
I guess it's the problem of different compiler that cause the problem.
const
【在 n*******0 的大作中提到】 : const int * &p 里面的const 是修饰int 的。所以开始的定义说的是p指向的是const : int,也就是只能读不能改的int。由于main里面p定义成的是一个内容是int 的数组, : 内容是可改的,所以调用f的时候编译器就报错了。 : 俺的理解。。。
|
i******t 发帖数: 22541 | 8 f(const int * p) does not need p must a const array
It just means the object that p point cannot be changed
in my understanding
【在 d*********i 的大作中提到】 : main里的int 数组不是const型
|
c*******7 发帖数: 465 | 9 From "int *" to "const int *", C++ need to create a temporary const
pointer for you. Unfortunately, C++ Standard forbids creating such pointer
for non-const reference. This also explains why "const int * const &"
actually works as someone suggested.
【在 i******t 的大作中提到】 : reference to pointer问题 : void f(const int * & p) : { : int i =0; : i = p[0]; : cout<< i<: system("PAUSE"); : } : int main() : {
|