以下结构意味着什么?
#include <iostream>
template <int ...> struct s;
int main() {
int i = s<,>::xxx;
std::cout << i << std::endl;
}
由gcc 4.4.5+编译,执行时输出0
。
答案 0 :(得分:13)
我重写了这个程序:
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
表达式生成代码。
底线;这看起来像编译器错误。编译器应该给出错误消息。
确凿的旁注:我为程序int main() { int i; return i; }
获得了相同的程序集输出。