[英]What does this Method declaration/definition mean? (something to do with passing an array?)
嗨,我遇到遗留代码,我遇到了一个奇怪的方法定义/声明。 我对它的作用有一个有根据的猜测,但我还不能100%肯定。
宣言:
const SomeEnumeratedId (&SomeMethod() const)[SOME_CONSTANT_VALUE];
定义
const SomeEnumeratedId (&SomeClass::SomeMethod() const)[SOME_CONSTANT_VALUE]
{
return someMemberArray;
}
我最好的猜测是它传递了对someMemberArray的引用,并且它保证它的大小为SOME_CONSTANT_VALUE,但我从未在方法声明之后看到[]符号,因为它出现了很多括号。
任何帮助非常感谢。
它是const
成员函数的声明,它不带参数并返回对SOME_CONSTANT_VALUE
const
SomeEnumeratedId
数组的SOME_CONSTANT_VALUE
。
使用typedef
看起来更容易理解。
typedef const SomeEnumeratedId SomeArrayType[SOME_CONSTANT_VALUE];
SomeArrayType& SomeClass::SomeMethod() const
{
return someMemberArray;
}
正如@Charles已经指出的那样奇怪的表示法是一个常量方法的声明/定义,它返回对作为成员存储的元素数组的引用。
语法非常奇怪,可以(并且应该)通过typedef简化:
typedef SomeEnumerated array_t[SOME_CONSTANT_VALUE];
const array_t& SomeMethod() const;
是的,这是C完全向后类型声明语法的结果。 它类似于在执行数组typedef时如何编写: typedef int myArrayType[3];
,使用[3]
后的新类型名称,而不是原始名称。
如果你真的很聪明,你可以使用{std,tr1,boost}::array
- 值得考虑 - 所以你最终得到:
array<SomeEnumeratedId, SOME_CONSTANT_VALUE>& SomeClass::SomeMethod() const;
代替。
使用typedef(在其他答案中探讨)的变通方法是相关的,虽然不完全等同于{std,tr1,boost}::array
是包装器,而不仅仅是typedef。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.