繁体   English   中英

这个方法声明/定义是什么意思? (与传递数组有关?)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM