在运算符的情况下进行C const转换

前端之家收集整理的这篇文章主要介绍了在运算符的情况下进行C const转换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请考虑以下代码
struct A {
    void operator++() const {}
};

void operator++(const A&) {}


int main () {
    const A ca;
    ++ca; // g++ Error (as expected): ambiguous overload for ‘operator++’

    A a;
    ++a; // g++ Warning: "ISO C++ says that these are ambiguous,// even though the worst conversion for the first is better
         // than the worst conversion for the second"
         // candidate 1: void operator++(const A&)
         // candidate 2: void A::operator++() const
}

为什么g只发出警告而不是错误?换句话说,非成员函数如何比成员函数更合适?

谢谢!

解决方法

如果我猜测,成员函数在初始化时会导致指针限定从A *转换为A const *,而非成员绑定A const&引用非const对象,它实际上根本不是转换,但在重载解析期间仅仅是非优选的情况.

当从参数类型引导到相应参数类型的路径涉及不同类型的转换时,会出现该消息.该标准拒绝将苹果与橙子进行比较,例如指针限定与参考绑定或整体提升与转换运算符,但GCC愿意.

原文链接:https://www.f2er.com/c/119013.html

猜你在找的C&C++相关文章