gpt4 book ai didi

c++ - 扩展编译器以在编译时评估 "complicated"函数(具有已知输入值),超出 `constexpr` 范围

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:13 25 4
gpt4 key购买 nike

请看this example .尝试使用 constexpr 获得编译时评估将是极其困难的,如果不是不可能的话。

但是,在调用函数的地方,所有参数在编译时都是已知的。理论上,(存在一些优化属性?),编译器可以暂停解析,创建一个带有函数的小程序,编译它,运行它,并得到结果以创建一个 char 常量以用于主程序编译.

我知道其中一个问题是交叉编译:如果编译器可以构建一个可以在正在构建的机器上运行的程序,那么你只能从编译器运行一个程序。但这似乎并非无法克服。

毫无疑问:我不是第一个想到它的人。但我尝试搜索,但只能找到 constexprtemplate 东西。将来有没有计划在任何编译器中实现这样的功能?该功能也可以改写为:提供在您的 C++ 源代码中编写 C++ 程序的可能性,编译器可以根据请求编译和运行以创建常量。

最佳答案

constexprtemplate 是C++ 中强制编译器在编译时做某事的唯一方法。在许多情况下,优化器也能够计算出更复杂的函数。然而,你可能会不经意地离开编译器的“舒适区”,例如通过一些分配和/或指针算法。

正如 Marc Glisse 在评论中指出的那样,在您的具体示例中,您使用的是 std::string 而不是 native char* 并且由于在该类的实现,优化器可能会丢失。

话虽如此,您可能会欢迎 C++14,它放宽了函数为 constexpr 的要求。您现在可以声明局部变量、可变对象和基本控制流结构。您也可以操作原始字符串。

https://isocpp.org/wiki/faq/cpp14-language#extended-constexpr


从更广泛的角度来看,正在进行一项将暂存引入编程语言的研究。暂存是一种通过显式代码结构对程序进行部分评估的想法,允许在编译时执行甚至最复杂的功能。一些从不同角度解决问题的示例方法:

请注意,尽管它们都没有尝试在 C++ 中执行此操作。

关于c++ - 扩展编译器以在编译时评估 "complicated"函数(具有已知输入值),超出 `constexpr` 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29857764/

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