タグ付けされた質問 「implicit-conversion」

言語構文による変換を特に要求せずに、オブジェクト、変数、または値をある型から別の型に変換して、型の制限を満たします。

2
Scalaは暗黙的にどこを探しますか?
Scalaの初心者への暗黙の質問は、コンパイラが暗黙の場所をどこで探すのでしょうか。言葉がなかったかのように質問が完全に形づくられることは決してないように見えるので、私は暗黙のうちに意味します。:-)たとえば、integral以下の値はどこから来ますか? scala> import scala.math._ import scala.math._ scala> def foo[T](t: T)(implicit integral: Integral[T]) {println(integral)} foo: [T](t: T)(implicit integral: scala.math.Integral[T])Unit scala> foo(0) scala.math.Numeric$IntIsIntegral$@3dbea611 scala> foo(0L) scala.math.Numeric$LongIsIntegral$@48c610af 最初の質問への回答を学ぶことにした人に続く別の質問は、明白な曖昧さのある特定の状況(しかし、とにかくコンパイル)で、コンパイラがどの暗黙の使用を選択するかです。 例えば、scala.Predefから2つの変換を定義StringするいずれかWrappedStringと相互にStringOps。ただし、どちらのクラスも多くのメソッドを共有しているので、たとえば、Scalaが呼び出し時にあいまいさについて不平を言わないのはなぜmapですか? 注:この質問は、問題をより一般的な方法で述べることを期待して、この別の質問に触発されました。この例は、回答で参照されているため、そこからコピーされました。

4
Objective-Cの暗黙的な変換は整数精度「NSUInteger」(別名「unsigned long」)を「int」警告に失います
私はいくつかの演習を進めており、次のような警告が表示されます: 暗黙的な変換で整数の精度が失われます: 'NSUInteger'(別名 'unsigned long')から 'int' #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { NSArray *myColors; int i; int count; myColors = @[@"Red", @"Green", @"Blue", @"Yellow"]; count = myColors.count; // <<< issue warning here for (i = 0; i < count; i++) NSLog (@"Element %i …

4
静的暗黙演算子
私は最近このコードを見つけました: public static implicit operator XElement(XmlBase xmlBase) { return xmlBase.Xml; } どういうstatic implicit operator意味ですか?

7
1をshortとして渡すことができるのに、int変数iを渡せないのはなぜですか?
最初と2番目の書き込みは機能するが、最後は機能しないのはなぜですか?3つすべてを許可して1(int)1であるか、それとも渡されたかを検出できる方法はありますか?そして、本当になぜそれが許されるのですか?2つ目は許可されていますが、最後は許可されていません。 コンパイルエラーを表示するデモ using System; class Program { public static void Write(short v) { } static void Main(string[] args) { Write(1);//ok Write((int)1);//ok int i=1; Write(i);//error!? } }


5
「is_base_of」はどのように機能しますか?
次のコードはどのように機能しますか? typedef char (&yes)[1]; typedef char (&no)[2]; template <typename B, typename D> struct Host { operator B*() const; operator D*(); }; template <typename B, typename D> struct is_base_of { template <typename T> static yes check(D*, T); static no check(B*, int); static const bool value = sizeof(check(Host<B,D>(), int())) == sizeof(yes); }; …

2
関数でconst std :: string&が0を受け入れないようにする
千の言葉に値する: #include<string> #include<iostream> class SayWhat { public: SayWhat& operator[](const std::string& s) { std::cout<<"here\n"; // To make sure we fail on function entry std::cout<<s<<"\n"; return *this; } }; int main() { SayWhat ohNo; // ohNo[1]; // Does not compile. Logic prevails. ohNo[0]; // you didn't! this compiles. return 0; } 文字列を受け入れるブラケット演算子に数値0を渡しても、コンパイラは文句を言わない。代わりに、これはコンパイルされ、メソッドに入る前に失敗します: …

3
暗黙的な変換とタイプクラス
Scalaでは、少なくとも2つの方法を使用して、既存の型または新しい型を改良できます。を使用して何かを数量化できることを表現したいとしIntます。次の特性を定義できます。 暗黙的な変換 trait Quantifiable{ def quantify: Int } そして、暗黙の変換を使用して、たとえば文字列やリストを定量化できます。 implicit def string2quant(s: String) = new Quantifiable{ def quantify = s.size } implicit def list2quantifiable[A](l: List[A]) = new Quantifiable{ val quantify = l.size } これらをインポートした後quantify、文字列とリストのメソッドを呼び出すことができます。定量化可能なリストはその長さを格納するため、後続のへの呼び出しでのリストの高価な走査を回避することに注意してくださいquantify。 型クラス 別の方法はQuantified[A]、あるタイプAは数量化できることを示す「目撃者」を定義することです。 trait Quantified[A] { def quantify(a: A): Int } 私たちは、このタイプのクラスのインスタンスを提供Stringし、Listどこかに。 implicit val stringQuantifiable = new …


10
なぜprintf(“%f”、0); 未定義の動作を与える?
ステートメント printf("%f\n",0.0f); 0を出力します。 ただし、ステートメント printf("%f\n",0); ランダムな値を出力します。 ある種の未定義の動作を示していることに気づきましたが、具体的にその理由を理解できません。 全てのビットが0である、浮動小数点の値がまだ有効であるfloat0の値を持つ floatとint(つまりも関連している場合)、私のマシン上で同じサイズです。 なぜ浮動小数点リテラルの代わりに整数リテラルを使用すると、printfこの動作が発生するのですか? PS私が使用した場合と同じ動作が見られます int i = 0; printf("%f\n", i);

4
戻り時に暗黙的な変換は許可されていません
#include <optional> bool f() { std::optional<int> opt; return opt; } コンパイルしません: 'return': cannot convert from 'std::optional<int>' to 'bool' 参考資料を参考にして説明を探したのですが、大丈夫なので読んでみました。 暗黙的な変換は、あるタイプT1の式がそのタイプを受け入れないが他のタイプT2を受け入れるコンテキストで使用される場合は常に実行されます。特に: T2をパラメーターとして宣言された関数を呼び出すときに、式が引数として使用される場合。 式がT2を期待する演算子でオペランドとして使用される場合。 T2を返す関数のreturnステートメントを含む、T2型の新しいオブジェクトを初期化するとき; 式がswitchステートメントで使用されている場合(T2は整数型)。 式がifステートメントまたはループで使用される場合(T2はブール値)。


2
戻り値の型を明示的に述べているにもかかわらず、ラムダの呼び出しがあいまいです
オーバーロードされた関数は、ラムダのタイプが決定可能であることを前提に、両方のファンクターを取り込む必要があります(キャスト可能(std::function私が間違っている場合は修正してください)。定義されていますか?([&]() -> Type {}) 現在のソリューションでは、参照によるキャプチャが必要なため、コードにそのロジックが含まれていることに注意してください。 次の例は、問題について説明しています。 #include <iostream> #include <string> #include <functional> void do_some(std::function<void(int)> thing) { thing(5); } void do_some(std::function<bool(int)> thing) { if (thing(10)) { std::cout << "it's true!" << std::endl; } } int main() { int local_to_be_modified = 0; do_some( [&](int in) { local_to_be_modified = in; std::cout << "This …

3
int(0)からベクター内のポインターへの暗黙的な変換を回避する方法
JSONでキーへのパスのすべてのノード名を収集したい状況があります。配列インデックス「0」、「1」の条件も許可されていることを考慮してください。ただし、引用符を忘れがちであり、逆参照するとクラッシュする可能性があります。これを拒否したいのですが。例: #include <vector> #include <iostream> int func(const std::vector<const char*>& pin) { return pin.size(); } int main() { // {"aname", "3", "path", "0"} wanted but this still compile std::cout << func({"aname", "3", "path", 0}) << std::endl; } 私はこれを見つけて試してみました非構築関数の暗黙的な変換をどのように回避しますか?次のように: #include <vector> #include <iostream> int func(const std::vector<const char*>& pin) { return pin.size(); } …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.