c++ - 为什么我不能呼叫定义为朋友的接线员?
问题描述
我试图operator+
为某种类型定义一元。我希望这个运算符只能在一个类的范围内使用,但即使这不可能,我仍然对此感到困惑:
struct X {};
struct Foo {
friend const char* operator+(X x) { return "hi"; }
void foo() {
+X{}; // error: invalid argument type 'X' to unary expression
}
};
int main() {
+X{}; // error: invalid argument type 'X' to unary expression
return 0;
}
如果运算符在类内不可调用,并且在类外不可调用,那么它是否可调用?它去哪儿了?
(请注意,+(X{})
其行为方式相同,如果将operator+
移到 之外struct Foo
,则两个调用都有效。)
解决方案
推荐阅读
- javascript - 在组件构造函数之外使用时变量未定义
- attask - 无法搜索assignedToID 的任务:null
- unity3d - 为什么我的游戏在协程内冻结?
- html - Jekyll 液体 if 语句混淆
- reactjs - 将两个反应 API 链接在一起,其中一个的输出进入第二个的输入。使用 Axios/Async
- sql - SQL Server:从字符串转换时间时转换失败
- sql - 如何在表之间翻转 Oracle 同义词
- unity3d - 我可以让两个对撞机连接到我的敌人上做不同的事情吗?如果可以,怎么办?
- r - 导出具有固定缩放和边界框的传单地图,无需填充
- java - 无法使用 Gradle 分发获取“BuildEnvironment”类型的模型