c – 某些东西可以绑定到非const ref而不是const ref的情况?

最小的问题

请考虑以下功能:

class NonTrivialClass { /* ... */ };

void f1(NonTrivialClass      &) {}
void f2(NonTrivialClass const&) {}

是否有一个表达式调用f1,其中一个不能用f2替换f1?

上下文

在提供工作的前景中,我被要求“编写方法double approx(vector< Point>& pts)”(给出的点),它使用来自pts的点来近似类似布冯的已知常数办法.

我编写了一个定义double approx(vector< Point> const& pts)的实现(注意const).而且由于一个尚未确定的原因,我没有通过测试!

在删除了所有可能的解释之后,我对测试平台和那个扣人心弦的限定符有疑问……他们的测试程序是否有可能使用double approx(vector< Point>& pts)而不是double约(向量<点> const& pts)?

解决方法:

如果您的问题承认疯狂的答案:

struct NonTrivialClass {};
struct NonTrivialClass2 {
    operator NonTrivialClass&();
    operator NonTrivialClass const&();
};

void f1(NonTrivialClass      &) {}
void f2(NonTrivialClass const&) {}

int main()
{
  NonTrivialClass2 foo;

  f1(foo);
  f2(foo); // error: reference initialization is ambiguous
}

当然,这不适用于矢量<> case(除非测试机器通过某种’测试’对象与一个破碎的(可能模板化,sfinae-unfriendly-whatever)转换操作符到一些包装的向量成员?似乎不合理……但并非不可能)

上一篇:What is a Digital Signature? 理解数字签名与数字证书


下一篇:c – 如何使用函数签名的typedef作为std :: function的类型参数?