【发布时间】:2018-01-10 10:03:43
【问题描述】:
小问题
请考虑以下功能:
class NonTrivialClass { /* ... */ };
void f1(NonTrivialClass &) {}
void f2(NonTrivialClass const&) {}
是否存在调用f1 的表达式,其中不能用f2 替换f1?
上下文
在提供工作机会时,我被要求“编写方法 double approx(vector<Point>& pts)”(Point 被给出),它使用来自 pts 的点来近似已知以类似布冯的方式保持不变。
我编写了一个定义double approx(vector<Point> const& pts) 的实现(注意const)。由于一个尚未确定的原因,我没有通过测试!
在删除所有可能的解释后,我对测试平台和抓人const 限定符存有疑问......他们的测试程序是否有可能与double approx(vector<Point>& pts) 一起工作,但不能与double approx(vector<Point> const& pts) 一起工作?
【问题讨论】:
-
如果你在参数列表中看到
vector而不是std::vector的测试,也许你不应该相信它。 ;) -
会不会是测试使用了它希望你实现的函数签名?如果是这样,那你就不走运了。但无论如何你都不想在那里工作:-)
-
应该提到,在骨架答案的开头有一个很大的
using namespace std;。但我们不要分道扬镳。 -
我终于从测试作者那里得到了答案。事实上,我输入的代码被逐字插入到测试程序中,就像
#include "contestant_code.cc"那样。在骨架答案中是一个起始using namespace std;,我将其删除......测试程序期待vector<Point>编译;它没有了。 => 测试失败。
标签: c++ reference constants signature