【问题标题】:Possible c++11 instance template error on Visual studio 2015Visual Studio 2015 上可能的 c++11 实例模板错误
【发布时间】:2017-02-08 15:02:08
【问题描述】:

运行下面的代码,好像编译器定义了一个空的 printf();

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

【问题讨论】:

    标签: c++ c++11 visual-c++ visual-studio-2015


    【解决方案1】:

    这段代码没有问题,分解一下:

    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 步开始)

    那么是什么让你认为它不起作用?

    如果你清理了你的输出,它会变得不言而喻..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      相关资源
      最近更新 更多