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