問題タブ [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.

0 投票する
4 に答える
970 参照

c++ - const_cast と UB

$5.2.11/7 - 「[注: オブジェクトの型に応じて、const-qualifier68 をキャストする const_cast から生じるデータ メンバーへのポインター、左辺値、またはポインターを介した書き込み操作は、未定義の動作を引き起こす可能性があります (7.1. 5.1).]"

このセクション (C++03) の文言は、私にとって驚くべきものです。驚くべきことは2つあります。

a) まず、'may' の使い方。なぜ「かもしれない」なのですか?標準の他の場所は、未定義の動作について非常に明確です

b) もともと const オブジェクトの constness をキャストしても、すぐに「未定義の動作」にならないのはなぜですか。UB をトリガーするために書き込みが必要なのはなぜですか?

0 投票する
1 に答える
813 参照

c++ - C ++ TR1:constメソッドで乱数を生成するために一様分布を使用する適切な方法は何ですか?

乱数を生成したい単純なconstメソッドがあります

これにより、標準の(テンプレート化されている場合)const違反エラーが発生します

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tr1/random.tcc:910:4:エラー:'const std :: tr1::mersenne_twister'を'result_typestd :: tr1 ::mersenne_twister <_UIntType、__w、__ n、__ m、__r、__a、__u、__s、__b、__t、__cの'this'引数として渡す__l> :: operator()()[with _UIntType = long unsigned int、int __w = 32、int __n = 624、int __m = 397、int __r = 31、_UIntType __a = 2567483615ul、int __u = 11、int __s = 7、_UIntType __b = 2636928640ul、int __t = 15、_UIntType __c = 4022730752ul、int __l = 18、result_type = long unsignedint]'は修飾子を破棄します

const_castこれはオンなしで実行できthisますか?

0 投票する
3 に答える
395 参照

c++ - const_castによるこのconstの初期化には、未定義の動作がありますか?

私の小さなテストによると、このコードは機能します。しかし、それは未定義の振る舞いを持っていますか?const_castを使用してconstオブジェクトを変更すると、以前のテストで実行時アクセス違反が発生しましたが、それらがどのように異なっていたかを思い出せません。それで、ここに根本的に何か問題があるのでしょうか?



(sizeof(bigLut_t)が大きすぎてスタックに収まらないことに注意してください。)

編集:私は実際、これらの大きなオブジェクトを初期化する方法として、ybungalobillの小さなコメントのアイデアが一番好きです:


0 投票する
6 に答える
730 参照

c++ - STL std::map、ref で const に渡し、const_casting の必要性

STL コンテナーに関する簡単な質問const_castとベスト プラクティスがあります。classFooにプライベート STL std::mapfrom Widget*toがある次の例を検討してintください。

宣言:

意味:

が const への参照をパラメーターとして受け取ることを考えるとhasWidget、呼び出し時に constness をキャストする必要がありますmap::find( wiget_mapfrom Wiget*to int)。私が知る限り、このアプローチは賢明で望ましいものですが、経験豊富な C++ プログラマーからのフィードバックがなければ、このアプローチを受け入れるのは気が進まないのです。

const_castキャストの結果を STL メソッドに渡すことを考えると、これは適切に使用できる数少ないケースの 1 つに思えます。私は正しいですか?

この質問の他の順列がすでに提起されていることを認識しています(たとえば、object を使用した vector の const_cast)が、上記に直接対処しているようには見えません。

前もって感謝します。

0 投票する
1 に答える
775 参照

c++ - const_casting の質問

次のコードがあります。

「a」の値が 29 に変わらないのはなぜですか? これは、b を const_casting するときに a の constness が削除されないということですか?

0 投票する
4 に答える
119 参照

c++ - ポインタで文字列を参照する

重複の可能性:
単純なCコードがセグメンテーション違反を受け取るのはなぜですか?

コードスニペット2がスニペット1のように動作しないのはなぜですか?

PS私の無知を許してください。

0 投票する
3 に答える
309 参照

c++ - const をキャストして参照を取る関数に渡すと、どうなりますか?

メインで g に渡すと何が起こるか教えてもらえますか? static_cast ですか?

上記のコードは以下のコードに似ているため、コピーは作成されないと確信しています。

前もって感謝します :)

0 投票する
7 に答える
34826 参照

c++ - const関数内で非const関数を呼び出す方法(C ++)

私は次のようなレガシー関数を持っています:

そして、そのレガシーコード内で関数を呼び出して、次のようにする必要があります。

問題は、このエラーが発生することです。

newCall()これで、このエラーを修正するために、const関数を作成できることがわかりました。しかし、その後、いくつかnewCall()の関数呼び出しを行う必要があるため、これらの関数呼び出しをすべてconstにする必要があります。などなど、最終的にはプログラムの半分がconstになるように感じます。

私の質問:constではないRandom()内の関数を呼び出す方法はありますか?または、私のプログラムの半分をconstにすることなく、 newCall()内部で実装する方法について誰かがアイデアを持っていますか?Random()

ありがとう

-ジョシュ

0 投票する
2 に答える
1148 参照

c++ - const_cast <>を使用した場合の未定義の動作はどこにありますか?

私が行った場合:

未定義動作はどこ(どの行)に正確にありますか?

私はSOでこれをたくさん探してきましたが、明確で正確な答えは見つかりませんでした(または、少なくとも、私が理解できるものはありませんでした)。

また、関連:この種の関数を提供する外部ライブラリを使用する場合:

次のようなものを書いて大丈夫ですか?

私は確かにそれread_string()が書き込もうとしないstrことを知っているので?

ありがとうございました。

0 投票する
1 に答える
810 参照

c++ - cスタイルのキャストでconst_castセマンティクスを無効にするコンパイラスイッチ?

最近、私は次のようなコードに出くわしました。

明らかに、開発者は自分が何をしているのかわかりませんでしたが、コンパイラがc-style-castを黙って受け入れず、少なくとも適切なものが必要なconst_cast場合は、これをコミットする前に2回も必要だった可能性があります。

それで、これは私に考えさせられました、現代のコンパイラーはconst_castc-style-castsのセマンティクスを防ぐためのスイッチを持っていますか?

static_c-style-castのすべての発生を防ぐことは単純に実用的ではなく、それらとセマンティクスを許可することは必要な悪reinterpret_です(一部のライブラリコードの場合のみ)が、私の印象では、c-style-castの合法的な使用は捨て去られますconstnessはC++コードベースでは非常にまれなので、完全に無効にすることは可能でしょうか?