Scott Meyer的《现代C++》一书中的第15项建议:“尽可能使用constexpr”。他说,您可以将函数标记为constexpr,并仍然使用在编译时未知的值进行调用--在这种情况下,它将像任何其他运行时函数一样运行,因此如果可能获得编译时计算的好处,但仍然可以使用非编译时值。编译器会自动处理。
但是,如果这是真的,那么为什么我们不能给每个函数都打上constexpr标签(或者更好的方法是不打任何标签,让编译器始终自动处理)呢?如果编译器能够检测值是否在编译时已知,并在我将该方法标记为constexpr时自动执行正确的操作,那么为什么它不能在我不编写constexpr时自动执行同样的检查呢?
但是,如果这是真的,那么为什么我们不能给每个函数都打上constexpr标签(或者更好的方法是不打任何标签,让编译器始终自动处理)呢?如果编译器能够检测值是否在编译时已知,并在我将该方法标记为constexpr时自动执行正确的操作,那么为什么它不能在我不编写constexpr时自动执行同样的检查呢?
constexpr
仅适用于不依赖于任何运行时状态的函数。 - SLaks