[英]template class of static const member variable vs static const member variable initialization
下面的代碼編譯良好
template<typename T>
struct foo
{
static const T value = 1 + foo::value;
};
但這是錯誤的
struct foo
{
static const int value = 1 + foo::value;
};
並且
template<typename T>
struct foo
{
static const int value = 1 + foo::value;
};
Error 1 error C2065: 'value' : undeclared identifier c:\visual studio 2013\projects\consoleapplication2\consoleapplication2\consoleapplication2.cpp 13 1 ConsoleApplication2
我認為第二種情況還是合理的
但是第一個是它如何工作的?
有人可以解釋嗎?
在第一個示例中,沒有靜態成員變量foo::value
,僅存在此類變量的模板 ,直到您實際嘗試使用它為止,該模板才存在。 因此,如果執行例如foo<int>::value
那么第一個錯誤也會出現。
您應該查看模板實例化 。 嘗試使該類成為對象時,將完成模板實例化。 第一次編譯程序時,靜態成員value
類型取決於實例化時傳遞的模板參數。 在第二種情況下, foo
被完全編譯,編譯器發現未聲明該值,因此報告錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.