编译器是否尝试constexpr
1所有?不只是函数/变量/程序员明确标记constexpr
的东西?在有人评论之前
是的,这就是优化
这个问题的一个更好的短语可能是:在最大的优化编译器去,直到它不能constexpr
别的什么?还是有一些实际的限制,或者其他的,意味着它只能constexpr
程序的某个子集?
1read: evaluate/solve at编译时
编译器必须完成语言要求的一切。
最重要的是,编译器可以做任何它喜欢的事情,只要结果是,就好像没有做任何额外的事情。
所以这完全取决于编译器做什么,有很多非优化或几乎没有优化的编译器在那里。一个好的优化编译器会在编译时尽可能多地求值,但通常只会达到一些内部限制。否则它可能永远不会结束。否则编译器必须解决暂停问题。
也就是说,有几页c++代码做大量的计算,而编译器生成的二进制文件只包含puts("The answer is 42.n");
,这总是很有趣的。