【发布时间】:2015-10-13 21:48:41
【问题描述】:
所以通常 constexpr 函数是在编译时执行的函数,当传递给它的参数也是 constexpr 所以如下:
constexpr int function(int x, int y){
return x+y;
}
参数声明如下:
constexpr int x = 5;
constexpr int y = 6;
将在编译时执行,但参数声明如下:
int x=5;
int y=6;
不会的。我想知道如果我们以下列方式调用这个函数会发生什么:
function(5,6);
从技术角度来看,5 和 6 是右值,但没有办法(我猜)它们可以被强制转换为 constexpr(如果我们可以笼统地说关于强制转换为 constexpr),所以在我看来它将被执行在运行时。但是,没有实际理由在运行时执行它,因为 x 和 y 在编译时都是已知的。
所以我的问题是现实生活中的情况如何?这个函数是在运行时执行还是在编译时执行
【问题讨论】:
-
字面量也是常量表达式。
-
如果是这样,请将其发布为答案,我会接受它:)
-
如果优化器意识到
x和y将始终具有相同的值,则也可能在编译时评估具有非constx和y的调用function(x, y)。只是不需要这样做,并且结果不能用于需要constexpr的地方。