2017-02-04 12 views

答えて

0

一定の基準であることを持っています、それは持っていません一定の参照になる?

いいえ、それはしていませんが、それは良いです。

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オペレータは唯一の非メンバ関数のデータが変更されないことを保証しますので - しかし、あなたは パラメータを渡すと、この外部パラメータ

関連する問題