如何解决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 举报,一经查实,本站将立刻删除。