微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++中的const和方法是什么

如何解决C++中的const和方法是什么

我看到了这样的代码

这个 & 是什么意思,这种方法的正式名称是什么?

struct S{
    int get() const &{
        return 5;
    }
};

int main(){
    S s;
    return s.get();
}

解决方法

方法签名上的 const & 表示调用对象应绑定到 const 左值引用。

但是,since rvalue can be bound to a const lvalue ref,下面的代码可以编译:

struct S{
    int get() const &{
        return 5;
    }
};
  

int main(){
    return S{}.get(); // compiles,S{} can be bound to const lvalue
}

要查看 & 的实际含义,您可以为 && 添加一个版本或删除 const:

使用 const && 的重载:

struct S{
    int get() const &{
        return 5;
    }
    int get() const && {
        return -5;
    }
};
  
int main(){
    return S{}.get(); // returns -5
}

有&但没有const:

struct S{
    int get() & {
        return 5;
    }
};
  
int main(){
    return S{}.get(); // compilation error cannot bind rvalue to lvalue
}
,

const 表示函数本身是 const - 该函数修改类/结构的成员数据项是编译时错误,因此可以使用 const 调用该函数对类实例的引用。

尾随的 & 非常不寻常(我从未在野外见过)。这意味着对用于调用此函数的实例的引用必须是左值。必须从右值调用后跟 && 的函数。

我相信一个函数可以被声明和定义两次,一次使用&,一次使用&&,因为它构成了签名的一部分。这对于某些模糊的优化很有用(显然)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。