【发布时间】:2023-04-05 05:23:01
【问题描述】:
所以我刚刚参加了一个 CS101 C++ 测验,这是其中一个问题:
int x=5;
if(x=2)
cout <<"this is true"<<endl;
else
cout <<"this is false"<<endl;
cout <<"this is all folks"<<endl;
对于可能的输出给出了以下选择
a. this is true
b. this is false
c. this is true
this is false
d. this is true
this is all folks
e. None of the above
现在我注意到 if 语句正在测试一个赋值,所以我圈出了 e.),因为我认为输出应该是语法错误。我不认为一个作业不能被评估为真或假。教练给我打错了。原因是大于 0 的参数为真。我告诉教授,除非 x=2 被括号括起来,否则这是不可能的。 x=2 本身不是真或假。讲师随后表示,我们不应该期望测试或测验中的代码可以运行,因为测试的是逻辑而不是语法。但从逻辑上讲,x=2 既不是真也不是假,对吧???
我不是在争论这些点;我弄错了只有两个中的一个。但教师坚持认为测验问题写得正确并结束了对话。我认为教练不喜欢我在这方面向她提问……她相当粗鲁地拒绝了我。无论如何,我使用 vim/g++ 运行代码,它给了我语法错误,建议我在赋值周围加上括号。是不是有些编译器比较挑剔??
【问题讨论】:
-
“我使用 vim/g++ 运行代码,它给了我语法错误” - 错误,还是只是一个警告?
-
是的,
g++不会给你一个错误,除非你在命令行上指定-Werror。赋值是C语言中的表达式,所以x = 2赋值后的值为x,显然是2,那你怎么可以做a = b = c = 2;之类的事情
标签: c++ computer-science