問題タブ [const-method]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - c++では、constも機能するのにコンパイラが非const関数を選択するのはなぜですか?
たとえば、次のクラスがあるとします。
コードの別の場所には、次のようなものがあります。
この場合、コンパイラが非 const バージョンを選択する理由を知っている人はいますか?
これはやや不自然な例ですが、解決しようとしている実際の問題は、オブジェクトが変更された場合にオブジェクトを定期的に自動保存することであり、ポインターはある時点で変更される可能性があるため、非 const でなければなりません。
c++ - これらのメソッドをconstと宣言する必要がありますか?
私はいくつかのC++コードに取り組んでおり、次のようなプライベートメソッドを持ついくつかのマネージャーオブジェクトがあります
OnFooUpdated()
このオブジェクトのリスナーでメソッドを呼び出します。
これらはこのオブジェクトの状態を変更しないため、const
通常はシステム全体の状態を変更しますが、技術的にはメソッドにすることができることに注意してください。特に、リスナーオブジェクトは、このオブジェクトをコールバックして変更する場合があります。
個人的にはそのままにしておきたいので、宣言はしませんconst
。
ただし、静的コードチェッカーQACはこれを逸脱としてフラグを立てるので、宣言するconst
か、なぜ非定数のままにして逸脱の許可を得る必要があるのかを議論する必要があります。
これらのメソッドを宣言しないための引数は何const
ですか?
または、QACに従って、宣言する必要がありますconst
か?
このオブジェクトに限定された厳密にローカルな視点を採用する必要がありますか、それともシステム全体を考慮する必要がありますか?
c++ - constメンバー関数はconstメンバー関数のみを呼び出すことができますか?
constメンバー関数はconstメンバー関数のみを呼び出しますか?
私がcompute()をconstにしないと、コンパイラは文句を言います。これは、constメンバー関数がメンバーを変更することを許可されていないため、constメンバー関数がデータメンバーを「間接的に」変更することを意味するため、非constsへの呼び出しを許可しないためですか?
c++ - C++ - 'const' 修飾子を使用して静的メンバー関数を作成できない理由
今日は問題が発生しました。私はstatic
メンバー関数が必要ですが、必須でconst
はありませんが、より良いです。しかし、私は自分の努力に成功しませんでした。なぜ、またはどのように言うことができますか?
c++ - 非 const バージョンではなく const 関数を呼び出す
目的のために Qt の共有データ ポインターに似たものをラップしようとしました。
私は C++0x オプションを使用してコンパイルしています。最小限のコードは次のとおりです。
ご覧のとおり、Data.x は const 関数なので、呼び出される演算子 -> は const でなければなりません。そして、非 const をコメントアウトすると、エラーなしでコンパイルされるので、可能です。それでも私の端末は次のように出力します:
「非定数データptr」
それは GCC のバグ (私は 4.5.2 を持っています) ですか、それとも欠けているものがありますか?
c++ - クラスの静的変数でデクリメント演算子を使用する方法
このようなクラスがあり、「getManagerNumber」でデクリメント演算子を使用して、ManagerNumber から 1 を引きたいのですが、どうすればよいですか?
c++ - const テンポラリーが const メンバー関数よりも非 const メンバー関数を呼び出すことを選択するのはなぜですか?
サンプルコードはhttp://en.cppreference.com/w/cpp/types/add_cvから取得しまし た (少し変更しました。)
出力は次のとおりです。
2 番目の呼び出しでT
は、const が修飾されているのでT()
、const バージョンを呼び出す必要がありますよね? または、私が見逃した特別なルールはありますか?
c++ - const メソッドの const 参照リターンのスレッド セーフ
このクラスを考えてみましょう:
メソッドはgetVectorRef
スレッドセーフですか?
getVectorRef
別のスレッドが戻ってきたときにinsertElement
、メンバ ベクトルが変更され、呼び出し元がgetVectorRef
間違った const 参照を取得するような呼び出しが行われる可能性はありますか?
2 つの const 修飾子 (1 つはベクトル用、もう 1 つはメソッド用) は、スレッド セーフのコンテキストでは意味がありませんか?
c++ - 非 const オブジェクトでは、なぜ C++ はメソッドの const バージョンを public-const および private-nonconst オーバーロードで呼び出さないのですか?
MSVC 2013 はこれを好まない:
const
参照にキャストすると、次のように機能します。
非オブジェクトでconst
メソッドを呼び出せないのはなぜですか?const
c++ - C++ オーバーロードの解決、変換演算子、および const
この場合
状況はかなり明確です - f(int *) が呼び出されますが、これは正しいようです。
しかし、私がこれを持っている場合(間違ってそのように行われました(*)):
operator char *() が呼び出されます。そのような決定パスが、演算子 bool() に行くよりも優れている理由がわかりません。何か案は?
(*) const を 2 番目の演算子に追加すると、コードは当然期待どおりに機能します。