簡體   English   中英

靜態類成員的順序

[英]The order of static class members

今天,我發現靜態類成員的順序實際上很重要。 這是示例:

template <typename T>
struct SizeOf
{
    template <typename U>
    static auto Test() { return U{}; }

    static const size_t value = sizeof(Test<T>());
};

std::cout << SizeOf<double>::value << std::endl; // ok!

但是,這種情況給了我編譯器錯誤:

template <typename T>
struct SizeOf
{
    static const size_t value = sizeof(Test<T>());

    template <typename U>
    static auto Test() { return U{}; }
};

std::cout << SizeOf<double>::value << std::endl; // error: "Test: undeclared identifier"

這是否意味着將靜態成員與全局變量/函數完全一樣地對待,因此以后出現的靜態成員看不到它們嗎?

這與編譯器知道名稱的順序有關。 當你有

template <typename T>
struct SizeOf
{
    static const size_t value = sizeof(Test<T>());

    template <typename U>
    static auto Test() { return U{}; }
};

編譯器從未見過Teststatic const size_t value = sizeof(Test<T>()); 所以它拋出

測試:未聲明的標識符

因為不知道它是什么。 當您有了它時,編譯器的另一種方式便知道Test是什么,因此可以正常編譯。

您不能引用未聲明的內容。 當編譯器遇到Test<T> ,他應該如何有意義地推斷出您的實際意思?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM