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