問題タブ [const-cast]
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++ - オブジェクトへのconst参照を取得し、その参照を使用してオブジェクトを変更するには(const_castを使用)?
const
クラスのインスタンスへの参照を返すメンバー関数があります。
例:
City *
const_castとgetReference()を使用してcity1を指す非constを取得するにはどうすればよいですか?
また、次のことを行うことで、const_castを使用せずに目的を達成することができました:(すでにStateのインスタンスが存在すると仮定してstate1
)
const参照を返す関数から非const参照を取得し、セッターを呼び出すにはどうすればよいですか?
ご清聴ありがとうございました
c++ - UBではなくそのオブジェクトへのポインタのconstをキャストした後、非constオブジェクトに書き込むのはなぜですか?
C ++標準によると、オブジェクトが元々それ自体でない場合は、ポインタから離れconst
てオブジェクトに書き込むことができます。const
だからこれ:
大丈夫ですが、これは:
UBです。
その理由は、オブジェクト自体がオブジェクトである場合const
、コンパイラはそのオブジェクトへのアクセスを最適化できるためです。たとえば、繰り返しの読み取りは変更されないオブジェクトでは意味がないため、繰り返しの読み取りは実行されません。
問題は、コンパイラが実際にどのオブジェクトであるかをどのように知るかということconst
です。たとえば、次の関数があります。
そしてそれは静的ライブラリにコンパイルされ、コンパイラはそれがどのオブジェクトに対して呼び出されるかを知りません。
これで、呼び出し元のコードでこれを実行できます。
そしてそれは大丈夫でしょう、またはそれはこれを行うことができます:
そしてそれは未定義の振る舞いになります。
コンパイラはこのような要件にどのように準拠する必要がありますか?後者を機能させずに前者を機能させるにはどうすればよいでしょうか。
c++ - constがグローバル変数にキャストされ、プログラムがクラッシュしました(C ++)
'const int maxint = 100;'の場合、関数は正常に実行されます。定義はmain関数内に配置されますが、外部に配置するとクラッシュして「アクセス違反」というエラーメッセージがポップアップ表示されます。
ある種の「未定義動作」だと誰かが言ったのですが、正確な答えと、constキャストを安全に使用する方法を知りたいですか?
c++ - const_castはC++で動作しませんか?
私は次のコードを持っています:
出力は:
なぜここでキャストが機能しないのですか?
c++ - プロセス間オブジェクトの受け渡し
独自のスレッドで 5 秒に 1 回実行される 1 つのアクティビティを持つクラスが必要です。これは Web サービスであるため、エンドポイントを指定する必要があります。オブジェクトの実行時に、メイン スレッドはエンドポイントを変更できます。これは私のクラスです:
newEndpoint オブジェクトは volatile と宣言する必要がありますか? 読み取りが何らかのループにある場合(コンパイラーが最適化しないようにするため)は確かにそれを行いますが、ここではわかりません。
実行ごとに、activity()
関数は新しいエンドポイントをチェックし (新しいエンドポイントがある場合は、それをクライアントに渡し、いくつかの再接続手順を実行します)、その作業を行います。
ミューテックスをロックします。つまり、newEndpoint オブジェクトは変更できなくなります。そのため、constメソッドを呼び出せるようにvolatileクラスの仕様を削除します。
setEndpoint メソッド (別のスレッドから呼び出されます):
これはスレッドセーフですか?そうでない場合、何が問題ですか?newEndpoint オブジェクトを揮発性にする必要がありますか?
c++ - const_cast で const を追加するときの未定義の動作?
この質問はconst_cast
、char *
const char *
. このキャストは暗黙的に行われ、キャストが暗黙的に行われているときにうまく機能することを認識しています。
問題のあるコードは次のとおりです。
Linux のマニュアル ページ にあるように、getenv()
をconst char *
受け取って返しますchar*
。したがって、const-correctness に関する私の理解によればchar*
、問題なく const キャストを実行できます。
それで、私の質問は、なぜconst_cast
ここで私にUBを与えているのですか(コードがクラッシュしています)が、予想通りconst_cast
(暗黙のキャスト)なしで正常に動作します(したがって、問題は の使用にある必要がありますconst_cast
) ?
注意してください、私は暗黙のキャストがここに行く方法であることを知っています.
編集:
このバグは仲間の So'ers では再現できないため、これはランタイム/コンパイラの奇妙な問題であると想定しています。ただし、このような問題が標準に記載されている場合はお知らせください。
当分の間、私はマイクの答えを受け入れています。
c++ - C ++ non const toconstcastingコンパイルエラー
以下のコードはコンパイルされません
VS2010で「パラメータ1を「int [1]」から「 constint*」に変換できません」とgccで同様のエラーが発生しました
宣言を次のように変更すると、次のようになります。
また
コンパイルされますが、非const変数宣言を受け入れない理由がわかりません
c++ - ここで const キャストを行っても安全ですか?
私は独自のジェネリック ツリーの実装を作成しましたが、イテレータを作成するときに const の正確性に問題があります。私が現在抱えている問題は次のとおりです。
これは、私が書いた DFS イテレータのヘッダー ファイルです。
したがって、私が懸念しているのは、間接参照演算子です。
そこで const_cast を実行するのは適切ですか? ユーザーが const オブジェクトをコンテナに入れると、これが問題を引き起こすかどうか疑問に思っていますか?
c++ - C スタイルの構造体アクセスによるカプセル化の維持
クラスがあるとします:
これにより、C と C++ の両方の方法でデータを取得できますが、設定時に有効なデータを検証することもできます。次のように使用できます。
しかし、すべてがうまくいっているわけではありません。これにより、特定の汚いトリックも可能になります。
そもそもクラスに入れることの半分を悪用したくない場合はどうなりますか? 1つの障害のために(一見)メンバーに直接アクセスすることを好む人々に対して、ある程度の余裕を持たせないことを余儀なくされていますか、それとも構文(読み取り用)とカプセル化の両方を実際に許可するためのトリックがありますか?
その方法を使用せずに(今回は一貫して)私が考えることができる構文を維持する最良の方法は次のとおりです。
これは、代わりに古い構文とクラスの安定性を維持することを意図してアプローチする理想的な方法でしょうか? 構文を正確に維持するために私が考えることができる唯一の方法は、データ メンバーを小さなクラスにラップすることですが、これを適用するクラスごとに多くの作業のように思えます。
c++ - C ++ constキャスト、これが安全かどうかわからない
それはばかげた質問のように思われるかもしれませんが、私は本当にこれを明確にする必要があります:
これは私のプログラムに危険をもたらしますか?
const_cast
でも必要ですか?
入力ポインタの値を変更すると、安全に機能しstd::string
ますか、それとも未定義の動作が発生しますか?
これまでのところ、唯一の懸念は、入力ポインタを変更して使用できなくするたびに、これが文字列「some_text」に影響を与える可能性があることです。
ヒントをくれてありがとう、自分の足での撮影は避けたい