c++ - C++ 可变模板异常示例

  显示原文与译文双语对照的内容
0 0

下面的结构是什么意思?

#include <iostream>
template <int ...> struct s;
int main() {
    int i = s<,>::xxx;
    std::cout << i << std::endl;
}

它将被编译gcc 4 .4 .5+和执行时输出 0.

时间:原作者:6个回答

0 0

我重新写了一遍程序在此:

template <int ...> struct s;
int main() {
    int i = s<,>::xxx;
    return i;
}

并编译其与 -S开关,来获取程序集输出我清除如下:

main:
        pushq   %rbp
        movq    %rsp, %rbp
        movl    -4(%rbp), %eax
        popq    %rbp
        ret

现在,我的asm荒疏了,但似乎是唯一的重要代码 movl -4(%rbp), %eax,这将返回值设置为任何它可以读取 i. 换句话说,只返回任何的程序时在堆栈的顶部。 main输入函数。 这似乎证实@jrok是注释,它的初始化 i以某种方式忽略。 已生成任何代码的神秘 s<,>::xxx表达式。

底线,看来这是个编译器bug。 编译器应给出一个错误消息。

说书面证明: 收到相同程序集输出的程序 int main() { int i; return i; }.

原作者:
...