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

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

3
C#の文字から整数
Intが有効な値の範囲内にある場合、Int値をUtf16の対応するCharに変換する最良の方法は何ですか?
96 c#  casting 



4
shared_ptr <Derived>をshared_ptr <Base>として渡す
shared_ptr派生型shared_ptrのaを基本型のaを取る関数に渡すための最良の方法は何ですか? shared_ptr不必要なコピーを避けるために、私は通常、参照によってsを渡します。 int foo(const shared_ptr&lt;bar&gt;&amp; ptr); しかし、私が次のようなことをしようとすると、これは機能しません int foo(const shared_ptr&lt;Base&gt;&amp; ptr); ... shared_ptr&lt;Derived&gt; bar = make_shared&lt;Derived&gt;(); foo(bar); 使用できます foo(dynamic_pointer_cast&lt;Base, Derived&gt;(bar)); しかし、これは2つの理由で最適ではないようです。 Aはdynamic_cast、単純なため、過剰なビットが得ツーベースキャストようです。 私が理解しているdynamic_pointer_castように、関数に渡すポインターのコピー(一時的なものではありますが)を作成します。 より良い解決策はありますか? 後世のための更新: ヘッダーファイルがないという問題であることが判明しました。また、ここで私がやろうとしていたことは、アンチパターンと見なされます。一般的に、 オブジェクトの存続期間に影響を与えない(つまり、オブジェクトが関数の期間中有効である)関数は、単純な参照またはポインターを使用する必要がありますint foo(bar&amp; b)。 オブジェクトを消費する関数(つまり、特定のオブジェクトの最終ユーザー)は、unique_ptrby値を取る必要がありますint foo(unique_ptr&lt;bar&gt; b)。呼び出し元はstd::move、関数に値を入力する必要があります。 オブジェクトの存続期間を延長する関数はshared_ptr、値をとる必要がありますint foo(shared_ptr&lt;bar&gt; b)。循環参照を避けるための通常のアドバイスが適用されます。 詳細については、ハーブサッターの「基本に立ち返る」の話を参照してください。


8
実装定義の動作を回避する効率的な符号なしから符号付きのキャスト
unsigned intas引数を取り、intUINT_MAX +1を法とする合同を引数に返す関数を定義したいと思います。 最初の試みは次のようになります。 int unsigned_to_signed(unsigned n) { return static_cast&lt;int&gt;(n); } しかし、言語弁護士なら誰でも知っているように、INT_MAXより大きい値の符号なしから符号付きへのキャストは、実装によって定義されます。 (a)仕様で義務付けられている動作のみに依存するようにこれを実装したいと思います。(b)最新のマシンおよび最適化コンパイラでno-opにコンパイルされます。 奇妙なマシンに関しては... unsignedintに対してUINT_MAX + 1を法とするsignedint合同がない場合、例外をスローしたいとしましょう。複数ある場合(これが可能かどうかはわかりません)、最大のものが必要だとしましょう。 OK、2回目の試行: int unsigned_to_signed(unsigned n) { int int_n = static_cast&lt;int&gt;(n); if (n == static_cast&lt;unsigned&gt;(int_n)) return int_n; // else do something long and complicated } 私の謙虚な意見ではありそうもないので、私が典型的な2の補数システムを使用していないときは、効率についてはあまり気にしません。そして、私のコードが2050年の遍在する符号と大きさのシステムのボトルネックになった場合、誰かがそれを理解して最適化できるに違いありません。 さて、この2回目の試みは、私が望むものにかなり近いものです。キャスト先intは一部の入力に対して実装定義ですが、キャストバック先unsignedはUINT_MAX +1を法とする値を保持するために標準によって保証されています。したがって、条件付きは私が望むものを正確にチェックし、私が遭遇する可能性のあるどのシステムでもコンパイルされません。 ただし...int実装定義の動作を呼び出すかどうかを最初に確認せずに、まだキャストしています。2050年のいくつかの架空のシステムでは、誰が何を知っているかを実行できます。だから私はそれを避けたいとしましょう。 質問:私の「3回目の試み」はどのように見えるべきですか? 要約すると、私はしたい: unsignedintからsignedintにキャストします 値modUINT_MAX +1を保持します 標準で義務付けられている動作のみを呼び出す …

7
const_castは安全ですか?
に関する情報があまり見つかりませんconst_cast。(Stack Overflowで)私が見つけた唯一の情報は次のとおりです。 const_cast&lt;&gt;()/変数の削除CONST(ネス)(又は揮発性らしさ)を追加するために使用されます。 これは私を緊張させます。const_cast原因の予期しない動作を使用できますか?もしそうなら、何ですか? または、いつ使用しても大丈夫const_castですか?

3
SwiftでCGFloatをFloatにキャストする
値をとして保存する必要がありますFloatが、ソースデータはCGFloat: let myFloat : Float = myRect.origin.x しかし、これによりコンパイラエラーが発生します。「NSNumber」はサブタイプ「Float」ではありません だから私が明示的にこのようにキャストすると: let myFloat : Float = myRect.origin.x as Float しかし、これによりコンパイラエラーが発生します: '式のタイプ'フロート 'を'フロートに変換できません ' これを行い、コンパイラーを満足させる正しい方法は何ですか?
91 casting  swift  cgfloat 

11
文字列を返す値にjavascript(jquery)を使用して整数値を追加するにはどうすればよいですか?
私は次のような単純なhtmlブロックを持っています: &lt;span id="replies"&gt;8&lt;/span&gt; jqueryを使用して、値(1)に1を追加しようとしています。 var currentValue = $("#replies").text(); var newValue = currentValue + 1; $("replies").text(newValue); 何が起こっているのですか? 81 その後 811 9ではなく、これが正解です。何が悪いのですか?

8
オブジェクトをTにキャストします
XmlReader.NETのクラスを使用してXMLファイルを解析しているので、さまざまな属性を汎用的に読み取る汎用解析関数を作成するのが賢明だと思いました。私は次の機能を思いついた: private static T ReadData&lt;T&gt;(XmlReader reader, string value) { reader.MoveToAttribute(value); object readData = reader.ReadContentAsObject(); return (T)readData; } 私が気付いたとき、これは私が計画したように完全には機能しません。キャストはaから数値型に変換できないため、intまたはなどのプリミティブ型ではエラーがスローされます。私の関数が変更された形式で普及する方法はありますか?doublestring
91 c#  generics  casting 

4
SQLの二重コロン(::)表記
誰かのコードを拾いました、そしてこれはwhere句の一部です、誰かが二重コロンが何を示しているか知っていますか? b.date_completed &gt; a.dc::date + INTERVAL '1 DAY 7:20:00'

9
(文字列)または.toString()?
Object oパラメータ付きのメソッドがあります。 この方法では、Stringnullではない「o」が含まれていることを正確に知っています。確認したり、他のことをしたりする必要はありません。私はそれをStringオブジェクトとまったく同じように扱わなければなりません。 ただ好奇心が強い-何が安いか-それをキャストStringするObject.toString()か、使用しますか?それとも時間-/ cpu- / mem-価格で同じですか? 更新:このメソッドはObject、インターフェースの実装であるため、受け入れます。パラメータタイプを変更する方法はありません。 そして、それはまったくあり得ませんnull。nullや空をチェックする必要はないと言いたかっただけです。私の場合、常に空でない文字列があります。
89 java  casting 



10
キャストとConvert.To()メソッドの使用の違い
doubleonstring値をキャストする関数があります。 string variable = "5.00"; double varDouble = (double)variable; コードの変更がチェックインされ、プロジェクトは次のエラーでビルドされます。 System.InvalidCastException: Specified cast is not valid. しかし、次のことをした後... string variable = "5.00"; double varDouble = Convert.ToDouble(variable); ...プロジェクトはエラーなしでビルドされます。 キャスティングとConvert.To()メソッドの使用の違いは何ですか?なぜキャストはスローしException、使用はスローConvert.To()しないのですか?
88 c#  casting 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.