1

有问题的代码:

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 > Find All References,但找不到任何使用它的地方。对我来说,它看起来像一个没有指定返回值的成员方法。

这和下面有什么不同?

PCArea NDCVolume::PCArea() const;
4

2 回答 2

1

它是一个转换运算符。

如果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
于 2012-07-20T08:35:03.063 回答
0

隐式转换运算符到类型 PCArea。

PCArea NDCVolume::PCArea() const;

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

于 2012-07-20T08:34:45.927 回答