2016-09-30 63 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)

那么是什么让你觉得它不起作用?

如果你清理了你的输出,它将变得不言自明..

相关问题