5
我想弄清楚是否有性能增益與constexpr
而不是通常創建對象。Constexpr創建對象
這是constexpr
的代碼片段。
class Rect
{
const int a;
const float b;
public:
constexpr Rect(const int a,const float b)
: a(a),b(b){}
};
int main()
{
constexpr Rect rect = Rect(1,2.0f);
}
並且沒有constexpr
。
class Rect
{
int a;
float b;
public:
Rect(int a, float b)
: a(a),b(b){}
};
int main()
{
Rect rect = Rect(1,2.0f);
}
我期待會有少了很多代碼爲constexpr
,因爲內存應該在編譯時被初始化。
我正在使用constexpr
嗎?如果這不是真的,你可以使用constexpr
在編譯時創建對象,然後使用它們而沒有任何運行時開銷?
謝謝!
_「的constexpr指定符,它是__possible__評估在編譯時函數或變量的值」 _來源:http://en.cppreference.com/w/cpp/language/constexpr。並不是說它需要在編譯時進行評估。嘗試更改'Rect rect = Rect(1,2.0f);'爲'constexpr Rect rect {1,2.0f};' –
爲什麼downvote?這是寫得很好,*不*明顯(至少,不是我)。 – Bathsheba
我的意思是,當你開啓優化時沒有什麼區別,因爲你不用'rect'做任何事情,所以[它會被刪除](https://godbolt.org/g/hQxTnU)是否或不是你用'constexpr'。你無法比沒有代碼更有效率! – cdhowie