如何阅读此运算符声明和实现
How to read this operator declaration and implementation?
有问题的代码:
struct PCArea {
PCArea(
int minxx = 0,
int minyy = 0,
int maxxx = 0,
int maxyy = 0
) {}
};
struct NDCVolume {
NDCVolume() {}
operator PCArea() const;
};
// how does this operator work? how to use/read it?
NDCVolume ::operator PCArea() const {
return PCArea(iminx, iminy, imaxx, imaxy);
}
已从代码段中删除冗余代码。我使用过Visual Studio>查找所有引用,但找不到任何正在使用的引用。对我来说,它看起来像是一个没有指定返回值的成员方法。
这和下面有什么不同?
PCArea NDCVolume::PCArea() const;
它是一个转换运算符。
在NDCVolume NDCVolume::PCArea() const;
的情况下,它只是一个函数,不会被隐式使用
在定义转换运算符的情况下,您可以编写
NDCVolume vol;
PCArea area = vol; //implicit conversion
在第二种情况下(使用正则函数),您必须使其明确:
NDCVolume vol;
PCArea area = vol.PCArea(); //explicit conversion
PCArea area2 = vol; //error, if no conversion operator is defined
隐式转换运算符到类型PCArea。
PCArea NDCVolume::PCArea() const;
只是函数,不是转换运算符,不能自动使用。
相关文章:
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 如何制作 cmakelists.txt编译使用在其他地方声明和实现的函数和类的 CPP
- 在实现文件中使用模板参数声明方法
- 在 h 和 cpp 文件中单独声明和实现模板有时有效,有时会出现链接器错误
- 在声明或实现中延迟初始化C++单一实例
- 声明中的实现C
- 如何实现声明功能-C 11,编译时间
- enable_if在类声明之外实现的方法专用化
- 将模板化实现分配给先前声明的函数
- 头文件中的类声明和实现
- 实现文件只能识别其他类的远期声明
- 避免对实现接口的类使用多个几乎相同的声明
- 模板化成员函数的声明和实现
- 如何用默认模板参数分离模板类的声明和实现
- 当声明了虚拟析构函数但没有实现时会发生什么情况
- 如何使用 std::enable_if 时拆分声明和实现
- 如何在类声明之外实现显式覆盖
- 在C 中的类声明和实现的位置混淆
- 遇到C++方形类的问题. 成员函数实现和声明
- 如何检查是否实现了每个声明的类函数