gpt4 book ai didi

c++ - 为什么 constexpr 不能只是默认值?

转载 作者:IT老高 更新时间:2023-10-28 21:43:05 26 4
gpt4 key购买 nike

constexpr 允许可以在编译时计算的表达式在编译时进行计算。

为什么这个关键字甚至是必要的?如果可能,为什么不允许或要求编译器在编译时评估所有表达式?

标准库对 constexpr 的应用不均衡,这会带来很多不便。将 constexpr 设为“默认”将解决这个问题,并可能改进大量现有代码。

最佳答案

已经允许在编译时根据 as-if 规则评估无副作用的计算。

constexpr 的作用是保证兼容的编译器需要进行什么数据流分析来检测1 compile-time-可计算表达式,并且还允许程序员表达该意图,以便他们在意外执行无法预先计算的操作时得到诊断。

constexpr 设为默认值会消除这种非常有用的诊断能力。


1 通常,要求“如果可能,在编译时评估所有表达式”是行不通的,因为检测“如果可能”需要解决停机问题,而计算机科学家知道这在一般情况下是不可能的。因此,在输出为 {“Computable at compile-time”、“Not computable at compile-time 或无法决定”}的情况下,使用了放松。不同编译器的决定能力取决于他们的测试有多聪明,这将使这个功能不可移植。 constexpr 定义要使用的确切测试。更智能的编译器仍然可以预先计算比标准测试规定的更多的表达式,但如果它们未通过测试,它们就不能被标记为 constexpr

关于c++ - 为什么 constexpr 不能只是默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38879475/

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