2017-02-04 57 views

回答

0

如果我有一個非成員constexpr函數取基準參數它有是不斷的參考?

不,它不會但它更好。

constexpr函數的主要用途是在編譯時計算表達式。將非const引用傳遞給這樣的函數沒有任何意義。如果你選擇修改函數中的輸入對象,我不得不問你爲什麼?如果您不修改輸入對象,最好使用const引用,就像將不會修改對象的成員函數設爲const成員函數總是一個好主意。

下面的代碼不工作,因爲當該函數需要使用非const參考

struct Foo { int i; }; 

constexpr bar(Foo& f) { return f.i * 2; } 

int main() 
{ 
    int arr[bar({20})]; // Can't use a temp object 
} 

下面的代碼工作的臨時對象不能被使用。該函數可以用於臨時對象以及可以用作左值的對象。

struct Foo { int i; }; 

constexpr bar(Foo const& f) { return f.i * 2; } 

int main() 
{ 
    int arr[bar({20})]; 
    Foo f{20}; 
    int v = bar(f); 
} 
+0

任何引用或鏈接 –

+0

@BlairDavidson,我更增添了幾分的描述來解釋我的「更好」的資格。希望它是有道理的。 –

0

簡短的回答:

龍答:不會,因爲const操作者只需確保非成員函數的數據不會被改變 - 但是如果你傳遞一個 參數,這個外國參數可以改變