YSC*_*YSC 3 c++ const reference signature
请考虑以下功能:
class NonTrivialClass { /* ... */ };
void f1(NonTrivialClass &) {}
void f2(NonTrivialClass const&) {}
Run Code Online (Sandbox Code Playgroud)
有没有调用的表达式f1,其中一个不能代替f1用f2?
在提供工作的前景中,我被要求"编写方法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)?
如果您的问题承认疯狂的答案:
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
}
Run Code Online (Sandbox Code Playgroud)
当然,这不适用于这种vector<>情况(除非测试机器通过某种'测试'对象与破坏(可能是模板化,sfinae-unfriendly-whatever)转换操作符到一些包裹的向量成员?似乎不合理......但并非不可能)