#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef int * PINT;
void test1(const int *&a)
{
cout << "test1" << endl;
}
void test2(const PINT &a)
{
cout << "test2" << endl;
}
int main()
{
int a = 111;
const int *p1 = &a;
int *p2 = &a;
//test1(p2);//为什么这行编译不过?
test1(p1);
PINT p3 = &a;
test2(p3);
system("pause");
}
注掉的哪一行为什么编译不过?
需要加上类型转换
test1((const int *&)p2);
从 int * 到 const int *& 是非法的。
改成这样就好了
void test1(const int * const& a)
{
cout << "test1" << endl;
}
加了别名后意义不一样了,编译器检查规则就变成了T&转换成const T&了,这样是合法的。