使用 constexpr 而不是 const 会更好地帮助编译优化吗?我有一些不变的值(value)。我可以使用 enum
而不是,但它们并非都是同一类型,出于明显的原因我不想使用 #define
。它们声明如下代码。我的问题是:如果我使用 constexpr
是否会增加编译器将其使用的值替换为文字常量值的可能性,或者如果我使用 const
则没有区别?我知道是否进行优化取决于每个编译器,但非常欢迎“一般”答案,因为它在大多数编译器中的行为。此外,假设结果对于像这样的简单本地人来说是不同的,如果他们不是 struct/class
的成员,那么结果也会不同吗?在这种情况下,const 折叠最难执行吗?
例如,
int foo()
{
constexpr int x = 10;
constexpr int y = x * 3;
do_domsething(y + n);
}
对比
int foo()
{
const int x = 10;
const int y = x * 3;
do_domsething(y + n);
}
最佳答案
今天,constexpr
仍然很新,可能会遇到一些优化问题。当然,需要在编译时计算变量自身的值。从长远来看,我希望每个人都有相同的优化机会。显然,何时发生这种情况是特定于编译器的。
只需使用对您和任何其他从事代码工作的人而言更明确的含义,不仅在行为方面,而且在意图方面。
除其他事项外,请注意 constexpr
保证常量始终具有相同的值,而 const
允许每个常量具有不同的值达到初始化时间(当然,除非通过初始化,否则不能更改)。但是地球上几乎每个编译器都会确定,对于您的示例,这些值确实是常量。
还有一件事:即使禁用优化,constexpr
编译时评估(如模板参数计算)也是活跃的。
关于c++ - constexpr 与 const : Will use a constexpr instead of const better help compile to optmize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22769338/