Proveit.com C++ 测试

4

有人在proveit.com上参加过C++测试吗?我做了几次,总是有些问题答错了,但我不禁怀疑是网站的问题而不是我的问题。我能想到的唯一一个例子(已经有一段时间了)是:

操作后x的值是多少?

int x = 5;
++x;

它给出了几个答案,其中一个是6。我不知道除此之外还有什么其他答案。为了确保,我会编译代码并仍然得到相同的答案,但测试会告诉我我错了。想知道是否有人对这个测试/网站有任何经验。


你还记得其他选项是什么吗? - Jeff Mercado
9
我不会去理会proveit.com,如果你真的想测试一下自己的C++知识,可以试试这个网站上的测验:http://www.mycppquiz.com。 - Matthieu N.
1
@Beh Tou Cheh:问题#2:静态成员变量必须在类外定义才能使用。我的回答是“错误”,因为“static int const = 5;”可以在类中定义该值,但该网站表示此断言为真。我对其质量不确定(也许我没有完全理解...):/ - Matthieu M.
7
@Matthieu: 或许后者是正确的。 - Matthieu N.
3个回答

2
也许这个测试读取会输出什么:
int x = 5;
std::cout << x++;

问题是:

输出结果将是什么?

因为当你这样做时,x 的值会改变,但由于 x 在原始值显示后被递增,所以 cout 显示的是 5。否则,在你的情况下它应该等于 6。(你说已经过了一段时间...)


1
您可能已经得到了答案,但希望这能帮助其他人。根据问题的陈述方式,您可能得到了错误的答案:
int x = 5;
cout << x++ << endl;
cout << x << endl;

由于x在输出后递增,因此会显示5和6。

int x = 5;
cout << ++x << endl;
cout << x << endl;

由于 x 在输出之前被增加,因此会显示 6 和 6。

1

严格来说,这取决于实现,因为这里可能会发生溢出。但是就所有实际目的而言,在代码执行完成时,x的值应该为6。


4
也许如果您有一个3.4位整数?我不认为存在任何可能导致5+1溢出的二进制架构... - user229044
@wilhelmtell 你的意思是哪些架构存在以及哪些不可能存在。正是这种想法导致了C++0x的延迟近两年。“如果我们不考虑在我们宇宙中不存在的架构,那么谁会考虑呢?” - user229044
1
@meagar 我不在委员会中,但我将这个建议视为一种压倒性的赞扬。那是一个来自测试的问题:我讨厌测试(不是JMP指令那种),也许是因为我经常尝试正确回答问题提出者期望之外的内容。你可以说我是一个叛逆者。 - wilhelmtell
4
不行。C++标准定义了有符号int的最小范围为-32767到32767,因此很明显C++ int在5次运算后不会溢出。 - eq-
1
@meagar:你有什么证据支持你关于支持不存在的架构的说法吗?也许你能够引用一下你所参考的会议记录? - Jerry Coffin
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接