如何阅读此运算符声明和实现

How to read this operator declaration and implementation?

本文关键字:实现 声明 运算符 何阅读      更新时间:2023-10-16

有问题的代码:

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;

只是函数,不是转换运算符,不能自动使用。