看板 EE_DSnP 關於我們 聯絡資訊
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