2016-09-30 87 views
0

運行下面的代碼,似乎編譯器定義了一個空的printf();Visual Studio 2015可能出現C++ 11實例模板錯誤

template<typename T> 
void printf(T value) { 
    std::cout << value << std::endl; 
    cout << "case 1" << endl; 
} 

template<typename T, typename... Args> 
void printf(T value, Args... args) { 
    printf(value); 
    cout << "..."; 
    printf(args...); 
    cout << "case 2" << endl; 
} 
int main() { 
    printf(1, 2, "123", 1.1); 
    return 0; 
} 

我正在使用vs 2015與最新的補丁。輸出是:

1 
case 1 
...2 
case 1 
...123...1.1 
case 1 
case 2 
case 2 
case 2 

回答

0

沒有什麼不對的代碼,把它分解:

  1. 呼叫printf(1, 2, "123", 1.1)
  2. 呼叫printf(1)隨後...隨後致電printf(2, "123", 1.1)
  3. 呼叫printf(2)其次...,然後致電printf("123", 1.1)
  4. 呼叫printf("123")隨後...隨後通過調用printf(1.1)
  5. 解開,版畫case 2(來自步驟4)
  6. 解開,版畫case 2(來自步驟3)
  7. 解開,版畫case 2(來自步驟2)

那麼是什麼讓你覺得它不起作用?

如果你清理了你的輸出,它將變得不言自明..

相關問題