首页 > 互联资讯 > 网络资讯  > 

C++,中使用,sizeof(main()),为何不会“死递归”?

我假设你使用的标准是 ISO/IEC 14882:2011,如果你没有该标准的正式文件你可以下载草案。

根据 [expr.sizeof]/1 中所说"The operand is either an expression, which is an unevaluated operand (Clause 5), or a parenthesized type-id."。就是说sizeof的操作数要么是非求值操作数要么就是被括号括起来的类型id。

在你这种情况下表达式 "main()" 是一个 "unevaluated operand"(非求值操作数),非求值操作数的准确定义位于 [expr]/7,简单点说就是这个操作数它不会被求值,对于表达式 "main()" 来说该表达式最终结果一般而言会是一个int(参见[basic.start.main]/2),sizeof 不会去真的执行 main 函数然后获取其返回值然后才对它的返回值应用sizeof,而是简单的对这个表达式的返回值类型做sizeof操作(也就是sizeof(int))。

其次虽然在[basic.start.main]/3中明确说明"The function main shall not be used within a program."(就是说你不能在程序里使用main函数),但是因为你这里的这个函数调用是一个非求值操作数所以程序依然是良好定义的。

C++,中使用,sizeof(main()),为何不会“死递归”?由讯客互联网络资讯栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C++,中使用,sizeof(main()),为何不会“死递归”?