タグ付けされた質問 「casting」

キャストは、変換が許可されている場合、オブジェクト型が明示的に別の型に変換されるプロセスです。このプロセスにより、値が変化する可能性があります。

8
dictのキーと値を `unicode`から` str`に変換する最速の方法は?
コードの1つの「レイヤー」から、別の「レイヤー」に渡す前にいくつかの計算/変更が実行されるdictを受信して​​います。元のdictのキーと「文字列」値はですがunicode、それらが渡されるレイヤーはstr。のみを受け入れます。 これは頻繁に呼び出されるので、次のようなものを変換するための最速の方法を知りたいと思います。 { u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } } ...に: { 'spam': 'eggs', 'foo': True, 'bar': { 'baz': 97 } } ...「文字列」以外の値は元のタイプのままにする必要があることに注意してください。 何かご意見は?
81 python  casting  types 

3
javacが不可能なキャストを許可し、他のキャストを許可しないのはなぜですか?
をにキャストしようとStringするjava.util.Dateと、Javaコンパイラがエラーをキャッチします。それでは、コンパイラが以下のエラーをフラグしないのはなぜですか? List<String> strList = new ArrayList<>(); Date d = (Date) strList; もちろん、JVMはClassCastException実行時にをスローしますが、コンパイラーはフラグを立てません。 動作は、javac 1.8.0_212および11.0.2と同じです。

6
なぜこれはタイプパンニングされたポインターの警告を逆参照しているとコンパイラ固有に主張されているのですか?
Stack Overflow REのさまざまな 投稿 を 読みました:逆参照型でパンされたポインターエラーです。私の理解では、エラーは本質的に、異なる型のポインターを介してオブジェクトにアクセスする危険性についてのコンパイラー警告である(例外はに対して行われているように見えます)と理解でき、これは理解できる合理的な警告です。char* 私の質問は以下のコードに固有です:なぜポインターのアドレスvoid**をこの警告の修飾にキャストするの-Werrorですか(を介してエラーにプロモートされます)? さらに、このコードは複数のターゲットアーキテクチャ用にコンパイルされており、そのうちの1つだけが警告/エラーを生成します。これは、正当にコンパイラのバージョン固有の欠陥であることを意味しているのでしょうか? // main.c #include <stdlib.h> typedef struct Foo { int i; } Foo; void freeFunc( void** obj ) { if ( obj && * obj ) { free( *obj ); *obj = NULL; } } int main( int argc, char* argv[] ) { …
38 c  pointers  casting 

6
2バイトを符号付き16ビット整数に変換する正しい方法は何ですか?
では、この答え、zwolはこの主張をしました。 2バイトのデータを外部ソースから16ビットの符号付き整数に変換する正しい方法は、次のようなヘルパー関数を使用することです。 #include <stdint.h> int16_t be16_to_cpu_signed(const uint8_t data[static 2]) { uint32_t val = (((uint32_t)data[0]) << 8) | (((uint32_t)data[1]) << 0); return ((int32_t) val) - 0x10000u; } int16_t le16_to_cpu_signed(const uint8_t data[static 2]) { uint32_t val = (((uint32_t)data[0]) << 0) | (((uint32_t)data[1]) << 8); return ((int32_t) val) - 0x10000u; } 上記の関数のどちらが適切かは、配列にリトルエンディアン表現またはビッグエンディアン表現が含まれるかどうかによって異なります。エンディアンネスはここでの問題ではありません、なぜzwolがに変換さ0x10000uれたuint32_t値から減算するのか疑問に思っていint32_tます。 なぜこれが正しい方法ですか? …

1
なぜC ++では、負の数のstatic_cast <unsigned>が定数かどうかによって異なる
equalがfalseであることを意味するC ++ルールは何ですか?与えられた: float f {-1.0}; bool equal = (static_cast&lt;unsigned&gt;(f) == static_cast&lt;unsigned&gt;(-1.0)); 例:https : //godbolt.org/z/fcmx2P #include &lt;iostream&gt; int main() { float f {-1.0}; const float cf {-1.0}; std::cout &lt;&lt; std::hex; std::cout &lt;&lt; " f" &lt;&lt; "=" &lt;&lt; static_cast&lt;unsigned&gt;(f) &lt;&lt; '\n'; std::cout &lt;&lt; "cf" &lt;&lt; "=" &lt;&lt; static_cast&lt;unsigned&gt;(cf) &lt;&lt; '\n'; return 0; …
28 c++  casting 

1
Haskellでの暗黙の静的型キャスト(強制)
問題 Haskellの次の設計問題を考えてみましょう。変数や一般式(多変量多項式)などを表現したい、シンプルでシンボリックなEDSLがありますx^2 * y + 2*z + 1。また、私は、表現上の特定のシンボリック方程式を表現言いたいx^2 + 1 = 1だけでなく、定義のように、x := 2*y - 2。 目標は次のとおりです。 変数と一般式には別のタイプを使用します。特定の関数は、複雑な式ではなく変数に適用される場合があります。たとえば、定義演算子:=はタイプである可能性があり (:=) :: Variable -&gt; Expression -&gt; Definition、左側のパラメーターとして複雑な式を渡すことはできません(明示的なキャストを行わずに、右側のパラメーターとして変数を渡すことができるはずです)。 。 式をのインスタンスにNumすることで、整数リテラルを式に昇格させ、補助ラッパー演算子を導入しなくても、加算や乗算などの一般的な代数演算に便利な表記法を使用できます。 言い換えると、変数を式に暗黙的かつ静的に型キャスト(強制)したいのです。そのため、Haskellには暗黙の型キャストがないことを知っています。それにもかかわらず、特定のオブジェクト指向プログラミングの概念(この場合は単純な継承)は、言語拡張の有無にかかわらず、Haskellの型システムで表現できます。軽量の構文を維持しながら、上記の両方の点をどのように満たすことができますか?可能ですか? 討論 ここでの主な問題はNumの型制限であることは明らかです。 (+) :: Num a =&gt; a -&gt; a -&gt; a 原則として、変数と式の両方に単一の(一般化された)代数データ型を書き込むことが可能です。次に、:=左側の式が区別され、変数コンストラクターのみが受け入れられ、それ以外の場合はランタイムエラーが発生するように記述できます。ただし、これはクリーンで静的な(つまりコンパイル時の)ソリューションではありません... 例 理想的には、次のような軽量の構文を実現したいと思います computation = do x &lt;- variable t …

2
無効なポインターを生成する関数参照をキャストしますか?
私はサードパーティのコードのエラーを追跡しており、それを何かに沿って絞り込みました。 use libc::c_void; pub unsafe fn foo() {} fn main() { let ptr = &amp;foo as *const _ as *const c_void; println!("{:x}", ptr as usize); } 安定した1.38.0で実行すると、関数ポインタが出力されますが、ベータ版(1.39.0-beta.6)で毎晩「1」を返します。(遊び場) _推論されているものは何ですか?なぜ動作が変更されましたか? これをキャストする正しい方法は単にであるとfoo as *const c_void思いますが、これは私のコードではありません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.