As title
刚刚写程式的时候发现的一个问题
void p0(const int){}
void p1(const int*){}
void p2(const int**){}
int main()
{
int ptr0;
int *ptr1;
int **ptr2;
p0(ptr0);
p1(ptr1);
p2(ptr2);
return 0;
}
error: invalid conversion from int** to const int**
为什么无法转换啊
看起来明明是个很合理的转换
或是有什么情况会导致这个转换出问题吗?
作者:
lf5471 (lf)
2015-02-07 15:48:00g++ a.cpp -fpermissive 可以从 error 降成 warning
作者:
Feis (永远睡不着 @@)
2015-02-07 16:35:00#1ItZvO1L (C_and_CPP)
作者:
OPIV (Monitor)
2015-02-07 16:49:00换成这样就合法了int *const *p2c-faq.com/ansi/constmismatch.html
作者:
akasan (KITO)
2015-02-07 17:10:00#1B_2w2Uj
所以意思就是 p2 有 const,但是他可能是借由没有const 的转上来的,导致了可以乱改他 deref 的结果
作者:
OPIV (Monitor)
2015-02-07 18:00:00是啊 只是你是把它pass到另一个函数里,应该是不会被乱改到还是有什么方法可以改 我不知道的?
作者:
Feis (永远睡不着 @@)
2015-02-08 12:11:00只要有全域或另外传入就可能爆炸。
函示宣告成void p2(int const*const*)比较适合情境喔
作者:
OPIV (Monitor)
2015-02-08 20:07:00那为什么 const int 和 const int * 就可以?这样另外传或有全域也一样暴啊!
作者:
avhacker (我想把整片天空打开)
2015-02-08 23:10:00