c++ - 为什么调用此 ref 限定的用户定义转换?
问题描述
在以下小代码中:
class A {
};
class B {
public:
operator A() const & {
return A{};
}
};
void foo(const A& a) {
}
int main()
{
B b;
A a1 = b;
A a2 = B{}; //<--- here
foo(b);
foo(B{}); //<--- here
}
为什么指定的行不会产生编译错误?我的强制转换运算符是由 限定的左值&
,所以我认为不应该为这两行调用对象是右值。
知道为什么这段代码编译没有任何问题吗?我注意到如果我const
从强制转换运算符声明中删除,这两行会出错。但我不确定 const 限定如何影响此 ref 限定方法的调用。
解决方案
因为右值也可以绑定到左值引用const
。(它们不能被绑定到非常量的左值引用。)
作为解决方法,根据您的意图,您可以const
按照您所说的删除限定符,或者使用 rvalue-reference 限定符添加重载(const
如果需要,还可以按照@HolyBlackCat 的建议添加限定符)并将其标记为delete
显式。例如
class B {
public:
operator A() const & {
return A{};
}
operator A() && = delete;
};
推荐阅读
- firebase - Firebase 火库 NullPointerException
- autodesk-forge - 在查看器中计算所有对象的体积 - Autodesk Forge
- r - 如何将日志功能应用于R中的数据框?
- android - 为什么“主页”按钮在我的 Android 应用程序中调用 `onDestroy()`?
- .net - 将 GitLab YAML 部署到 IIS
- svg - 为什么具有不同尺寸比的视图框的 svg 将元素呈现在中心?
- python - 如何将此数据写入 csv 文件
- ms-word - 自动更新使用 OpenXML SDK 生成的 DOCX 中目录的页码
- javascript - 如何在javascript中过滤下拉菜单
- python - python将字符串转换为字符串列表?