2017-10-03 5 views
0

これは、STDのためassignmentオペレータの定義:: basic_string_viewがあるconstexprの可変部材の一部として

constexpr basic_string_view& operator=(const basic_string_view& view) noexcept = default;

ためconstexprのを持っている目的が何であるかを私に説明することができ、誰です代入演算子

さらに一般的な疑問は、可変メンバーconstexprを作る理由は何ですか? VS2015コンパイラを使用すると、私は警告がありました。

(C++で14) 'constexpr'は 'const'を意味しません。明示的に 'const'を指定することを検討してください

代わりにエラーではありませんか?

+1

RHSの変数がconstexprの場合、コンパイル時に割り当てを実行できます。変更可能なメンバconstexprを作ることは、コンパイル時に内容を変更することを可能にします(これは、constexprがconstを暗示していたときには不可能でした)。 –

答えて

3

constexprコンテキストでローカル変数を作成し、C++で変更することができます。

ただし、代入演算子がconstexprでない場合は使用できません。

template<class T, std::size_t N> 
constexpr std::array<T, N> sort(std::array<T, N> in) { 
    for (std::size_t i = 0; i < in.size(); ++i) { 
    for (std::size_t j = i+1; j < in.size(); ++j) { 
     if (in[i] > in[j]) { 
     auto tmp = in[j]; 
     in[j] = in[i]; 
     in[i] = tmp; 
     } 
    } 
    } 
    return in; 
} 

live example

+0

あなたが言ったことを示すコンパイル可能な例を提供してください。 –

+0

@AntonDyachenko確かに、おもちゃの選択ソートが追加されました。 – Yakk

+0

基本的にはC++で14 constexprはD言語で純粋なものとほとんど同じことを意味します。 –

関連する問題