Re: c++ 求平方 我解不出來

看板Programming作者時間18年前 (2006/11/10 13:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/6 (看更多)
※ 引述《sjgau.bbs@ptt.cc (sjgau)》之銘言: > : 請問我這樣寫 語法上哪裡有錯呢 > : 謝謝 語法沒有錯,因為可以通過編譯, 語義有錯,其它板友已經回答你了; 語法錯誤一定無法通過編譯, 而語義錯誤可能能通過編譯, 也可能無法通過編譯。 sqrt 傳回的是 double, 你用 int 去接的語義會多做一件事, 就是還要將傳回值強制轉成 int, 並負擔精確度上的損失, 你原本希望做的事情沒有這麼多, 所以屬於語義上的錯誤。 另外, 由於你沒有明確以 cast 的方式指定這件事, 所以 compiler 應該會以 warning 的方式警告你, 你不應該隨便忽略它, 在 C++ 只要是會遺失精確度的隱式轉型, 都會丟出 warning 警告 user, 所以如果你的語義真的是要做轉型, m=sqrt(num); 應該寫成 m = static_cast<int>(sqrt(num));, 或者是 m = (int)sqrt(num);, 讓 compiler 以及將來閱讀你程式碼的人, 明確的知道你真的是想做 double -> int 的轉換, 這樣才是好的做法。 -- Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net School: National Tsing Hua University Department: Computer Science Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Undecided Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.252 > ╰─╮ ╚╦═╦╝ From:61-230-234-91.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩
文章代碼(AID): #15L0xK00 (Programming)
文章代碼(AID): #15L0xK00 (Programming)