我正在瀏覽OpenDE的源代碼,並且在類中遇到了數組索引操作符'[]'的一些奇怪的語法用法。這裏有一個簡單的例子來說明語法:這個C++語法是什麼意思,它爲什麼起作用?
#include <iostream>
class Point
{
public:
Point() : x(2.8), y(4.2), z(9.5) {}
operator const float *() const
{
return &x;
}
private:
float x, y, z;
};
int main()
{
Point p;
std::cout << "x: " << p[0] << '\n'
<< "y: " << p[1] << '\n'
<< "z: " << p[2];
}
輸出:
x: 2.8
y: 4.2
z: 9.5
這是怎麼回事?爲什麼這個語法工作? Point類不包含重載operator []
,此處此代碼嘗試執行自動轉換以在某處浮動。
我從來沒有見過這種用法 - 它絕對看起來很不尋常和令人驚訝的至少可以說。
由於
請注意,要查明它是使用'operator []'還是使用指針轉換函數,您可以做這個奇怪的測試:如果'0 [p]'工作,它使用指針轉換。如果它不起作用,但如果'p [0]'起作用,則它使用'operator []'。 – 2010-09-05 12:23:18