下面的代碼無法使用Visual Studio與2012錯誤編譯:C2234:「富」:引用數組是非法索引屬性如何返回引用?
struct MyClass
{
int m_var;
__declspec(property(get=GetFoo)) int& Foo[]; // < C2234
int& GetFoo(int) { return m_var; }
};
我不知道爲什麼是這種情況。
是的,引用數組是被標準禁止的。 但是,Foo []不是一個數組,而是一種到成員函數GetFoo()的符號鏈接。 它的行爲就像Foo是一個帶有重載索引操作符的類。 另一方面,下面的代碼是完全合法的,雖然它是在技術上相當於以前的片段:
struct FooClass
{
int m_var;
int& operator[](int) { return m_var; }
};
struct MyClass
{
FooClass Foo;
};
那麼,爲什麼錯誤C2234發出?這是一個編譯器設計錯誤?
順便說一句:真實的場景更復雜,所以沒有必要告訴我,交給成員的引用可能是一個壞主意。