簡體   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