作者bonoshi (sbo)
看板EE_DSnP
标题[问题]有关void f(int const*q)
时间Sun Nov 9 12:50:48 2008
Topic5的讲义上,第38张slide上的第二点说
2. How about:
int *p = new int;
void f(const int* q);
问:Is f(p) OK?
答案当然是ok,只要在函式内不要对*q进行修改就行了,可供验证的程式码如下
#include<iostream>
using namespace std;
void f(int const*q);
int main(void){
int*p=new int;
f(p);
system("pause");
}
void f(int const*q){
}
不过我却发现一件奇怪的事,如果p是一个double pointer,同样的语法用下去
,就不行了(请看下面)
#include<iostream>
using namespace std;
void f(int const**q);
int main(void){
int**p=new int*;
*p = new int;
f(p);
system("pause");
}
void f(int const**q){
}
compiling error
按照道理应该要可以执行才对?
那麽为什麽不可以呢?
麻烦高手帮忙回答一下
谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.240.71
1F:推 BloodyDuke:把int**P的宣告改成const int**p会给过 11/09 19:15
2F:→ BloodyDuke:但改成const int**p= int const*;不给过 11/09 19:17
3F:推 BloodyDuke:恩上面说错,是const int**p=new int *; 不给过 11/09 19:19
4F:→ BloodyDuke:但 const int**p=new const int *; 给过 11/09 19:20
5F:→ BloodyDuke:我想是compiler认为将一个int** assign给const int* 11/09 19:23
6F:→ BloodyDuke:无法确保最後指到的是一个const,而要看到其所指的 11/09 19:26
7F:→ BloodyDuke:pointer指到的是const,才会给过巴 11/09 19:28
8F:→ BloodyDuke:以上是用猜的,猜错请强者指教 11/09 19:29