yba*_*kos 6 c++ procedural declarative
人们如何能够很好地解释为什么以下代码不正确,因为作者试图以声明方式而不是程序性地编写C++代码?
const double NEWTONS_PER_POUND = 4.448;
int main()
{
double pounds, newtons;
pounds = newtons/NEWTONS_PER_POUND; /* pounds equals 'unassigned variable'/4.448 */
newtons = 10.0;
cout << pounds << endl; /* a big number, not 10.0/4.448 */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
作者希望cout显示一个正确的计算,但获得一个"疯狂的数字".
我会解释为"C++是程序性的,因此在声明时
pounds = newtons/NEWTONS_PER_POUND;
Run Code Online (Sandbox Code Playgroud)
newtons 尚未分配值.
有更好的建议吗?或者解释为什么C++不够"聪明"来执行用户错误预期的行为?
Zed*_*Zed 21
告诉作者
pounds = newtons/NEWTONS_PER_POUND;
Run Code Online (Sandbox Code Playgroud)
命令CPU到
他正在寻找的东西很可能是命令式的功能:
double newtons_to_pounds(double newtons) {
return newtons/NEWTONS_PER_POUND;
}
...
newtons = 10.0;
cout << newtons_to_pounds(newtons) << endl; /* a big number, not 10.0/4.448 */
return 0;
Run Code Online (Sandbox Code Playgroud)
Ste*_*n C 18
C++是一种命令式编程语言,而不是方程式求解器.
C++按您编写语句的顺序执行语句.除非被告知,否则C++不会初始化变量.C++允许您使用其值尚未初始化的变量,但是当您执行此操作时,结果未指定.没有指明任何可能发生的事情,包括产生"疯狂数字"等坏事.
这是详细的解释:
double pounds, newtons;
pounds = newtons/NEWTONS_PER_POUND;
newtons = 10.0;
Run Code Online (Sandbox Code Playgroud)
第一个语句声明了两个变量而没有初始化它们.此时,它们的值未指定.
第二个语句读取newtons(可能是任何东西)的值并将其除以NEWTONS_PER_POUND.结果(可以是任何东西)被分配给pounds.
第三个语句初始化newtons,但是影响我们刚刚执行的计算为时已晚.
好吧,不管学生的背景如何,都不应该太难解释:只是他们认为C++一次一步地评估程序,声明之后的声明(尽管编译工件如重新排序......).
C++处理这个问题的方式绝对没有什么特别之处,甚至也不限于计算机编程 - 相反,它是处理有序指令列表的日常方式.
| 归档时间: |
|
| 查看次数: |
998 次 |
| 最近记录: |