タグ付けされた質問 「const-correctness」


16
constの正確さで私を売る
では、なぜconstをできるだけ頻繁に使用することが常に推奨されているのでしょうか。constを使用することは、C ++のヘルプよりも面倒なことのようです。しかし、繰り返しますが、私はこれをpythonの観点から考えています。何かを変更したくない場合は、変更しないでください。つまり、ここでいくつかの質問があります: constとしてマークするたびにエラーが発生し、constになるように他の関数をどこかに変更する必要があるようです。次に、これにより、別の機能をどこかで変更する必要があります。これは経験を積むだけで簡単になるものですか? constを使用するメリットは、問題を補うのに本当に十分ですか?オブジェクトを変更するつもりがない場合は、それを変更しないコードを作成しないでください。 この時点では、正確性と保守性の目的でconstを使用することの利点に最も焦点を合わせていることに注意してください。ただし、パフォーマンスへの影響を理解するのも良いことです。

4
const-correctnessはパフォーマンスを向上させることができますか?
CまたはC ++コードでconst-correctnessを適用することは、保守性に関して良い習慣であるだけでなく、コンパイラーが最適化を実行できるようになる可能性があることを何度も読みました。しかし、私も完全に反対のことを読みました—それはパフォーマンスにまったく影響を与えないということです。 したがって、constの正当性がコンパイラーのプログラムのパフォーマンス向上に役立つ可能性がある例はありますか?

1
std :: function const correctness
次のような呼び出し可能なタイプがあるとします。 struct mutable_callable { int my_mutable = 0; int operator()() { // Not const return my_mutable++; } }; メンバー変数を変更するmutable_callable非定数があることに注意してくださいoperator()..... ここstd::functionで、自分のタイプからout を作成するとします。 std::function<int()> foo = mutable_callable{}; 今私はこれを行うことができます: void invoke(std::function<int()> const& z) { z(); } int main() { invoke(foo); // foo changed.....oops } 今、私の知る限りstd::functionsがoperator()あるconstごとに: https://en.cppreference.com/w/cpp/utility/functional/function/operator() だから、私の直感は、あなたがこれを行うことができないはずだということです... しかし、次に見て:https : //en.cppreference.com/w/cpp/utility/functional/function/function これは、呼び出し可能な型に定数があるかどうかに制約を課していないようですoperator()...... だから私の質問はこれです:それstd::function<int()> const&は本質的にそれと同じものであると仮定するのは正しいですstd::function<int()>&が、実際には2つの動作に違いはありません......そしてそれが事実である場合、なぜそれがconst正しくないのですか?

2
スレッドセーフルールによって提案された非const引数を使用してコンストラクターをコピーしますか?
レガシーコードの一部のラッパーがあります。 class A{ L* impl_; // the legacy object has to be in the heap, could be also unique_ptr A(A const&) = delete; L* duplicate(){L* ret; legacy_duplicate(impl_, &L); return ret;} ... // proper resource management here }; このレガシーコードでは、オブジェクトを「複製」する関数はスレッドセーフではない(同じ最初の引数を呼び出す場合)ためconst、ラッパーでマークされていません。私は現代のルールに従っていると思います:https : //herbsutter.com/2013/01/01/video-you-dont-know-const-and-mutable/ これduplicateは、そうではない詳細を除いて、コピーコンストラクタを実装する良い方法のように見えconstます。したがって、これを直接行うことはできません。 class A{ L* impl_; // the legacy object has …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.