下面的构造是什么意思?
#include <iostream>
template <int ...> struct s;
int main() {
int i = s<,>::xxx;
std::cout << i << std::endl;
}
由gcc 4.4.5+编译,执行时输出0
.
最佳答案
我把程序改写成这样:
template <int ...> struct s;
int main() {
int i = s<,>::xxx;
return i;
}
并用 -S
编译它-switch,以获得我清理到以下内容的程序集输出:
main:
pushq %rbp
movq %rsp, %rbp
movl -4(%rbp), %eax
popq %rbp
ret
现在,我的 asm 有点生疏了,但唯一重要的代码似乎是 movl -4(%rbp), %eax
,它将返回值设置为它可以从 i
读取的任何值.换句话说,当 main
时,程序只返回堆栈顶部的任何内容功能被输入。这似乎证实了@jrok 的评论,即 i
的初始化以某种方式被忽略。尚未为神秘的 s<,>::xxx
生成代码-表达式。
底线;这看起来像一个编译器错误。编译器应该给出错误信息。
确凿的旁注:我得到了相同的程序集输出 int main() { int i; return i; }
.
关于C++ 可变参数模板异常示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814705/