明らかにすべてを作ることはできませんconstexpr
。そして、何もしなければconstexpr
、大きな問題はありません。これまで、多くのコードがそれなしで書かれてきました。
constexpr
しかし、それを持っている可能性のあるものを平手打ちするのは良い考えですか?これに潜在的な問題はありますか?
コンパイラを気にしません。コンパイラーは、constexpr
.
同時に、あなたができるので、そこにそれを平手打ちするのは少しためらいます。コンパイラを気にしない/気にしない場合でも、主な対象者はコードを読んでいる他の人です。少なくとも IMO ではconstexpr
、かなり具体的な意味を伝えるために使用し、誤解を招く可能性があるため、他の表現に平手打ちする必要があります。constexpr
としてマークされているが、通常のランタイム関数としてのみ使用される関数で何が起こっているのか疑問に思うのは、読者にとって公平だと思います。
同時に、コンパイル時に使用することを正直に期待している関数があり、まだそのように使用していない場合は、 としてマークする方constexpr
がはるかに理にかなっている可能性があります。
constexpr
あらゆる機会にリスト形式で、特定の順序で並べようとしないのはなぜですか。
std::get
、最近何度か出てきました)Constexpr 関数には非常に多くの制限があるため、特別な用途のみに限定されています。最適化ではなく、一般的に望ましい関数のスーパーセットでもありません。私が何かを書くときは、多くの場合、メタ関数または通常の関数だけではうまくいかず、特別な考え方を持っているためです。Constexpr 関数は、他の関数とは異なります。
constexpr
コンストラクターについては、自分の考えを完全に理解できるかどうか確信が持てず、ユーザー定義のリテラルがまだ利用できないため、コンストラクターに関する特定の意見やアドバイスはありません。
はい。const
そのようなものをどこにでも置くことは常に良い習慣だと思います。たとえばclass
、特定のメソッドがメンバーを変更していない場合、常にconst
最後にキーワードを配置する傾向があります。
言語の側面とは別に、const
ネスに言及することは、将来のプログラマー/レビュアーにとって、式がその領域内で const ネスを持っていることを示す良い兆候でもあります。これは優れたコーディングの実践に関連し、読みやすさも向上させます。例 (@Luc から)
constexpr int& f(int& i) { return get(i); }
今置くことは、それも でなければならないことをconstexpr
示唆しています。get()
constexpr
による問題や影響は見られませんconstexpr
。
編集constexpr
:いくつかの状況でそれらをtemplate
引数として使用できるという追加の利点があります。