看板Programming
标 题Re: c++ 求平方 我解不出来
发信站政大狂狷年少 (Fri Nov 10 13:18:57 2006)
转信站ptt!ctu-reader!ctu-peer!news.nctu!news.cis.nctu!news.cs.nthu!WHSHS
※ 引述《[email protected] ( )》之铭言:
> 请问我这样写 语法上哪里有错呢
> 谢谢
语法没有错,因为可以通过编译,
语义有错,其它板友已经回答你了;
语法错误一定无法通过编译,
而语义错误可能能通过编译,
也可能无法通过编译。
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:
[email protected]
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"的狂狷不驯;属於年少的轻狂色彩 ◎