gpt4 book ai didi

c++ - 编译时计算迭代的可能性

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:19 24 4
gpt4 key购买 nike

在我的理解中,编译时计算是任何可以由编译器计算的东西,而不是在程序执行期间计算的那部分以提高性能。程序执行时可以进行迭代计算,但在编译时计算期间不允许迭代计算。一个麻烦且具体的例子是 Variadic Templates,人们自然而然地想到迭代来处理提供的各种类型,但标准和编译器强制程序员递归地处理它们。

一般来说,所有编译时计算都是通过递归而不是迭代来处理的。据我所知,预期在编译时计算的 constexpr 函数也应该是递归的。是什么让编译时的任何事物都禁止迭代?

最佳答案

当我在 Hammer 中实现消除常量子表达式作为优化时,问题原来是递归基本上已经在代码生成期间发生了。您实际上不需要定义变量,因为它们会被常量替换。

另一方面,如果您尝试运行一个循环,您不仅需要代码不仅在运行时对常量执行操作,而且是您的语言的成熟解释器。您需要能够声明变量、设置和接收它们的值(作为循环计数器),更糟糕的是,您需要检测无限循环,这样您的编译器就不会挂起(我的意思是,while(true); 是一个完美的常量表达式)。

简而言之,由于解析器、AST 和优化器的性质,在编译时递归评估部分比实现完全控制流和实现循环和变量操作要容易得多。

关于c++ - 编译时计算迭代的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41584766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com