2012-07-20 36 views
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>查找所有引用,但無法找到它正在使用的地方。對我來說,它看起來像一個沒有指定返回值的成員方法。

這與以下不同嗎?

PCArea NDCVolume::PCArea() const; 

回答

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 
+0

現在我必須檢查是否可以隱式轉換並分配給PCArea和區域。 – Jake 2012-07-20 09:03:57

+0

@Jake:不要那樣做,以供參考。因爲你會將引用綁定到局部變量。但是你可以將結果綁定到'const&' - 在這種情況下,對象的生存期將會延長 – Andrew 2012-07-20 09:05:39

+0

的理解,只是想檢查陷阱。謝謝=) – Jake 2012-07-20 09:42:30

0

隱式轉換運算符鍵入PCArea。

PCArea NDCVolume::PCArea() const; 

只是函數,不是轉換運算符,不能自動使用。