c++常引用有关的问题?

#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&了,这样是合法的。