作者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
推 BloodyDuke:把int**P的宣告改成const int**p會給過 11/09 19:15
→ BloodyDuke:但改成const int**p= int const*;不給過 11/09 19:17
推 BloodyDuke:恩上面說錯,是const int**p=new int *; 不給過 11/09 19:19
→ BloodyDuke:但 const int**p=new const int *; 給過 11/09 19:20
→ BloodyDuke:我想是compiler認為將一個int** assign給const int* 11/09 19:23
→ BloodyDuke:無法確保最後指到的是一個const,而要看到其所指的 11/09 19:26
→ BloodyDuke:pointer指到的是const,才會給過巴 11/09 19:28
→ BloodyDuke:以上是用猜的,猜錯請強者指教 11/09 19:29