[英]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{}; }
};
編譯器從未見過Test
中static const size_t value = sizeof(Test<T>());
所以它拋出
測試:未聲明的標識符
因為不知道它是什么。 當您有了它時,編譯器的另一種方式便知道Test
是什么,因此可以正常編譯。
您不能引用未聲明的內容。 當編譯器遇到Test<T>
,他應該如何有意義地推斷出您的實際意思?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.