【发布时间】:2009-09-01 06:42:50
【问题描述】:
如何才能很好地解释为什么以下代码不正确,因为作者试图以声明方式而不是程序方式编写 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;
}
作者希望cout 显示正确的计算,结果却得到了一个“疯狂的数字”。
我会将此解释为“C++ 是程序性的,因此在声明时
pounds = newtons/NEWTONS_PER_POUND;
newtons 没有被赋值。
有更好的建议吗?或者解释为什么 C++ 不够“智能”来执行用户错误预期的行为?
【问题讨论】:
-
许多现代编译器会尝试识别未初始化的变量并将它们报告为编译时错误。
-
实际上遵循您正在使用的语言的语义(并学习它们,如果您不了解它们)通常会有所帮助。没有人可以用 C++ 编写它并期望它以任何方式“工作”。也许它会,在一种虚构的 C++ 语言中,但不是在真实的语言中。如果他不明白你的解释,好吧,他只是太固执或心甘情愿地对现实视而不见。
-
再一次,我认为人们必须首先学习低级语言......从汇编开始。在汇编中,计算机工作的固有顺序方式是显式的。
-
没有
b=c之类的混淆语句。 -
它在一个 CPU 中。然后,一旦你开始研究一些 VHDL,它就不是了。
标签: c++ declarative procedural