friend ostream &operator<<(ostream &os, const CSnmpMaintenanceSwitch &sw);
4 回答
好吧,这意味着它存在一个运算符 <<(肯定在全局命名空间或当前类的命名空间中),将 ostream & 作为第一个参数,将 const CSnmpMaintenanceSwitch & 作为第二个参数,并且该运算符可以访问您的私有成员当前类(当然是 CSnmpMaintenanceSwitch)
这一行声明了一个operator<<
接受两个参数的参数:对实例的引用和对 的实例std::ostream
的常量引用CSnmpMaintenanceSwitch
。它将允许您编写有关CSnmpMaintenanceSwitch
输出流实例的一些信息,例如
operator<< ( std::cout , CSnmpMaintenanceSwitchInstance );
或者
std::cout << CSnmpMaintenanceSwitchInstance;
运算符被声明为friend
可以访问CSnmpMaintenanceSwitch
.
第一个参数被声明为非常量引用,因为输出流应该被修改(一些数据将被写入它)的默认性质oeprator<<
。
第二个参数被声明为常量引用,因为operator<<
不应更改它(默认情况下)。
声明它的原因friend
是您可能希望在重载运算符中直接访问和使用一些私有变量。
因为您将对象CSnmpMaintenanceSwitch
作为 a constant reference
,所以可以保证它不会修改私有数据
字面上地?这是一个独立<<
操作符的声明,它ostream
在左边和CSnmpMaintenanceSwitch
右边有一个。该表达式产生一个ostream
引用。
语义上?它是一个流插入运算符。你知道怎么说std::cout << someString;
吗?嗯,那是因为在某个地方,有一个声明说ostream& operator<<(ostream& os, const string &str);
. 您所询问的那行几乎肯定是在CSnmpMaintenanceSwitch
类中找到的,并为该操作员提供了输出其中一个对象所需的访问权限。所以现在你也可以说std::cout << mySnmpMaintenanceSwitch;
。