2014-11-14 140 views
13

我知道C++ 11允許使用constexpr指定編譯時的表達式,而不是運行時。什麼時候應該將構造函數設置爲constexpr?

我知道這也可以爲類的構造函數完成。 但是,這個構造函數必須初始化這個類的所有成員,以便在編譯期間用作constexpr,並且它調用的任何函數也應該被標記爲constexpr。

但是什麼時候將其構造函數設置爲constexpr,並且除了輕微優化以外是否還有其他好處?

這是否意味着,如果我可以,我應該始終將我的構造函數設置爲constexpr?

+0

一個可能的con可能是使用了許多'constexpr'對象增加了編譯時間。這就是*不*說它永遠不值得。 – Snps 2014-11-14 15:06:10

回答

12

通過使構造函數constexpr,您允許用戶創建constexpr對象,並在他們自己的常量表達式中使用它們。這使得班級在某些情況下更友好。例如,在編寫嵌入式系統時,如果可能,您想將數據放入只讀存儲器。

因此,從使課程變得靈活和儘可能普遍有用的角度來看,如果可以的話,您應該這樣做。

+0

如果類成員可以被實例化爲'constexpr',你能否只聲明一個構造函數'constexpr'? – 2014-11-14 15:09:57

+0

@GiovanniBotta:沒錯。 – 2014-11-14 15:17:40

相關問題