C++ “全球运营商”-&燃气轮机&引用;过载C++;
我想为指针全局重载“->”运算符。可能吗C++ “全球运营商”-&燃气轮机&引用;过载C++;,c++,operator-overloading,C++,Operator Overloading,我想为指针全局重载“->”运算符。可能吗 A *var1 = new A(21); int x = var1->someInt; 在该代码中,它必须在到达“var1”的“someInt”变量时触发 实际上,我正在尝试在到达指针的成员之前检查指针。另外,我试图在一个书面代码上实现这个系统,所以我不想在实际代码中做太多更改。如C++17标准草案第16.5.6节(重点部分)所述: 操作员功能应为非静态成员功能或 是一个非成员函数,至少有一个参数的类型为 是类、对类的引用、枚举或对 枚举 因此,
A *var1 = new A(21);
int x = var1->someInt;
在该代码中,它必须在到达“var1”的“someInt”变量时触发
实际上,我正在尝试在到达指针的成员之前检查指针。另外,我试图在一个书面代码上实现这个系统,所以我不想在实际代码中做太多更改。如C++17标准草案第16.5.6节(重点部分)所述: 操作员功能应为非静态成员功能或 是一个非成员函数,至少有一个参数的类型为 是类、对类的引用、枚举或对 枚举
因此,不可能重载不带任何参数的运算符。如C++17标准草案第16.5.6节(重点部分)所述: 操作员功能应为非静态成员功能或 是一个非成员函数,至少有一个参数的类型为 是类、对类的引用、枚举或对 枚举 因此,不可能重载不带任何参数的运算符 我想全局重载“->”运算符。可能吗
A *var1 = new A(21);
int x = var1->someInt;
不,这是不可能的
也许您可以在库或程序中定义一个“root”类(它将定义该操作符->
),并让您的所有类从中继承
顺便说一句,我不确定您是否能够在所有情况下(包括任何类类型的有效自动变量的地址)高效地定义isPointerValid
函数
在许多情况下,您无法定义此类函数(例如,类型中使用的联合
-s;您不容易知道联合的哪个成员当前处于活动状态。任意强制转换;…)
对于现有的代码和类,->
(通常不能重新定义)的内置含义已经用于使用它们编译代码
我想全局重载“->”运算符。可能吗
A *var1 = new A(21);
int x = var1->someInt;
不,这是不可能的
也许您可以在库或程序中定义一个“root”类(它将定义该操作符->
),并让您的所有类从中继承
顺便说一句,我不确定您是否能够在所有情况下(包括任何类类型的有效自动变量的地址)高效地定义isPointerValid
函数
在许多情况下,您无法定义此类函数(例如,类型中使用的联合
-s;您不容易知道联合的哪个成员当前处于活动状态。任意强制转换;…)
对于现有代码和类,
->
(通常不能重新定义)的内置含义已经用于使用它们编译代码。应该告诉您需要了解的内容。逻辑地思考它也可以回答您的问题(如果没有对象,对象成员访问操作符如何工作?)。您希望该操作符在不使用任何参数的情况下做什么?如果我没记错,语言定义要求操作符->
成为成员函数。应该告诉你你需要知道的。从逻辑上考虑它也可以回答您的问题(如果没有对象,对象成员访问操作符如何工作?)。您希望该操作符在不带任何参数的情况下做什么?如果我没记错,语言定义要求操作符->
作为成员函数。好主意,声明根类,但是我试图在一个书面代码上使用这个系统。所以我不能改变那么多。这应该进入你的问题(这是不可能的)。您需要改进您的问题,以便更多地解释真正的动机和上下文。好主意,声明一个根类,但我尝试在编写的代码中使用这个系统。所以我不能改变那么多。这应该进入你的问题(这是不可能的)。你需要改进你的问题,以便更多地解释真正的动机和背景。