【发布时间】:2014-01-22 07:29:48
【问题描述】:
为什么以下代码在 GCC 4.8 (g++) 中编译?它不是完全不合格式吗?
void test(int x)
{
return test(3);
}
int main() {}
- 我正在尝试使用调用
test的结果,它不存在 - 我正在尝试从
test返回一个值
两者都应该是根本不可能的 - 不仅仅是 UB,据我记得 - 使用 void 返回类型。
我得到的唯一警告是关于 x 未被使用,甚至没有关于添加非标准隐式返回类型的任何内容。
Live demo
【问题讨论】:
-
这与
void类型的对象无关。void类型的表达式是丢弃值表达式。 -
一旦你调用这个函数,它应该会产生一个
Segmentation fault -
@dan:或者堆栈溢出,或者具有无限调用深度的非终止程序的其他一些实际后果。这可能包括我的程序自发地发展感知力并在工作中给你打电话。 :)
-
注意:这并不特定于 C++11。自 C++98/03 以来,我们已经能够编写
return f();而不是{ f(); return; }(给定void f();)。 TC++PL3 §7.3(第 148 页)说“在编写返回类型是模板参数的模板函数时,这种形式的返回很重要”。 -
void自 C++98 以来一直是不完整的类型。您能否提供有关void在 C++11 中不再不完整的信息?