所以一般constexpr函數功能,即在編譯時執行,當傳遞給它的參數也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都是已知的,因此在運行時沒有實際的理由來執行它。
所以我的問題是它是如何在現實生活中?將這個函數在運行時被執行或編譯時
文字也是不變的表達。 –
如果是這樣,請將其作爲回答發佈,我將接受它:) – DawidPi
如果優化程序在編譯時也可能會調用帶有非常量「x」和「y」的調用'function(x,y)'意識到'x'和'y'將始終具有相同的值。它不需要這樣做,並且在需要'constexpr'的地方不能使用結果。 –