以下代码无法使用 Visual Studio 2012 进行编译并出现错误:C2234: 'Foo' : arrays of references are invalid
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 呢?这是编译器设计错误吗?
BTW.: 实际情况更复杂,所以没有必要告诉我将引用交给成员可能是个坏主意。