看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) int ** ipp; int const ** icpp = ipp; // Error int const * const * icpcp = ipp; // OK 程式跑出來的錯誤結果: invalid conversion 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) vc++ 2008, gcc 4.4 為什麼 line 2 無法編譯,line 3 又可以呢?,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.190.106
bobhsiao:看了頭都暈了......... 05/25 21:40
bobhsiao:VS2008 expresss 三行都可以過, 第三行最後漏了 ';' 05/25 21:44
bobhsiao:第二行 C 可以過, C++ 過不了 05/25 21:46
photon3108:對,第二行,c++ 沒辦法通過編譯器。 05/25 22:00
※ 編輯: photon3108 來自: 118.161.190.106 (05/25 22:00)
nowar100:他是要求你要用reinterpret_cast嘛? 05/25 22:14
photon3108:gcc 只有說 invalid conversion,沒有提及 r..._cast, 05/25 22:22
photon3108:line 2 感覺上好像滿合理的,只是不知錯在哪裡。 05/25 22:23
nowar100:其實我比較好奇什麼地方會用到這個 XD 05/25 22:28
meltice:懂這個薪水可以拿比較高嗎 05/25 22:29
photon3108:實務上我沒有用過,但練習 const 與 pointer 時,對於 05/25 22:29
photon3108:line 2 沒辦法編譯過,感覺得相當的意外。 05/25 22:30
zerodevil:只能說standard就這樣規定 沒什麼道理@_@ 05/25 22:41
avhacker:給樓上,不是沒什麼道理的,可是我又懶得打一堆字.... 05/25 22:45
avhacker:你可以想一下為何 float 可轉 int, 但float* 不能轉 int* 05/25 22:47
avhacker:或是把 int const * 給 typedef 成別的型別再試試看 05/25 22:48
zerodevil:這邊是cv qualifier的問題吧 跟type沒什麼關係 05/25 22:54
photon3108:補一個 line 4: int * const * ipcp = ipp; // OK,感 05/25 22:58
photon3108:覺是不是與 line 4 的那個特定位置的 const 有關係? 05/25 22:59
zerodevil:規定是 如果某處的cv qualifier不同(當然只能多不能少) 05/25 23:01
zerodevil:則它右邊的指標全部要加const, 除了最後一個 05/25 23:02
avhacker:看你要怎麼解讀囉,把 int* 做個 typede 玩玩就知道了 05/25 23:03
zerodevil:不懂樓上的意思@@ 05/25 23:07
softwind:icpp是一個pointer, 你可以de-ref兩次 ref到其值 05/25 23:16
softwind:如果該值是const, 那麼當然在de-ref過程中 不能改變其值 05/25 23:16
softwind:就是說 *icpp 你要得到 const int * const, 05/25 23:17
softwind:萬一 *icpp = &other_int;是合法的 這樣const int就沒有 05/25 23:18
softwind:意義了, 對client而言更是目瞪口呆 05/25 23:19
softwind:const double PI=3.14; const double *pPI=Π 05/25 23:26
softwind:void foo( const double ** pp){double db=0; *pp=&db;} 05/25 23:27
zerodevil:*icpp = &other_int;這expression本身是合法的啊 05/25 23:30
softwind:奇怪 我自己敲的sample是可以的... XD 05/25 23:38
softwind:??? 不是吧 你要綁訂const, 中間的deref就要const阿 05/25 23:57