我想知道为什么constexpr的好处没有被编译器优化?
编译器应该能够推断出一个值在编译时比人类要好得多(例如,如果一个函数调用的所有输入都是已知的),那么它应该能够将该值标记为已知值,以便后续分析,直到它变得am昧。因此,为什么要在这种情况下必须手动告诉编译器(而不是仅使用const关键字并将其留给编译器以在编译时评估值)。
这是因为编译器技术尚无法执行此操作,还是因为某种固有的限制因素阻止了编译器执行此操作?
最佳答案
如果省略constexpr
,则编译器很可能仍可以在编译时计算该值。
主要思想是,您可以告诉编译器您要在编译时评估某些内容,以便在您犯错时编译器可以发出错误,并使用在编译时无法评估的内容。
显然,它还允许在只允许使用编译时间常数(如数组大小)的地方使用这些值。