問題タブ [operator-keyword]
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 char * 変換が個別に行われるようにコードを少し変更すると、宣言後:
d という名前の ustring が空白になり、出力されるのは「testing」だけです。私の新しいコードには 3 つのコンストラクターがあります。以下は私の新しいライブラリコードです:
c++ - std::map operator[] と自動的に作成された新しいオブジェクト
私はこのようなことについて少し怖いです:
DWORD は自動的に初期化されないため、tmap[0] がインクリメントされる乱数になることを常に恐れています。ランタイムが DWORD を初期化する方法を知らない場合、マップはどのようにして DWORD を初期化するかを知ることができますか?
結果が常に であることが保証されていtmap[0] == 3
ますか?
list - Scalaの'::'演算子、どのように機能しますか?
Scalaでは、caseclassを作成し、次case class Foo(x:Int)
のようにリストに入れることができます。
さて、ここでは何も奇妙なことはありません。以下は私には奇妙です。演算子::
はリスト上の関数ですよね?Scalaで引数が1つある関数なら、中置記法で呼び出すことができます。例は、オブジェクト1 + 2
の関数です。定義したクラスには演算子がありませんが、次のことはどのように可能ですか?(+)
Int
Foo
::
Scala 2.8 RC1では、インタラクティブプロンプトから次の出力が得られます。
続けて使えますが、説明は?
c++ - カスタム文字列クラス (C++)
私は、教育目的と必要性のために、独自の C++ String クラスを作成しようとしています。
まず、私は演算子についてあまり知らないので、演算子を学びたいと思っています。クラスの作成を開始しましたが、実行するとプログラムがブロックされますが、クラッシュはしません。
さらに読む前に、次のコードを見てください。
まず第一に、私はすべてが正しいと宣言したかどうか確信が持てません。私はそれについてググってみましたが、オーバーロードに関するすべてのチュートリアルは、非常に単純ですが、それぞれがいつどのように呼び出されるかを説明していない基本的なアイデアを説明しています。たとえば、my = 演算子では、プログラムは CString(CString& str); を呼び出します。しかし、私には理由がわかりません。
以下の cpp ファイルも添付しました。
テストのために、このCString a = CString("Hello") + CString(" World"); と同じくらい単純なコードを使用しました。
printf(a);
デバッグしようとしましたが、ある時点で迷子になります。最初に、「hello」と「world」のコンストラクターを 2 回呼び出します。次に、 + 演算子で取得しますが、これで問題ありません。次に、空の文字列のコンストラクターを呼び出します。その後、「CString(CString& str)」に入り、今は迷っています。なぜこうなった?この後、「Hello World」を含む文字列がデストラクタにあることに気付きました (数回続けて)。再び私は非常に困惑しています。char* から Cstring に再度変換した後、前後に停止します。= 演算子に入ることはありませんが、それ以上進むこともありません。printf(a) には到達しません。
これにはVisualStudio 2010を使用していますが、基本的には標準のC++コードにすぎないため、それほど大きな違いはないと思います
c++ - +演算子でコピーされたインスタンスを削除するのは誰ですか?(c ++)
私はインターネット全体で+演算子を適切に実装する方法を検索し、見つけたすべての結果は次の手順を実行します。
この「プロセス」についていくつか質問があります。
この方法で+演算子を実装するのは愚かなことではありません。最初の行で代入演算子(クラスをコピーします)を呼び出し、次に戻り値でコピーコンストラクター(クラスもコピーします)を呼び出します。値によって、それは最初のコピーを破壊し、新しいものを作成します..率直に言って実際には賢くありません...)
a = b + cと書くと、b + c部分がクラスの新しいコピーを作成し、次に'a='部分がそのコピーを自分自身にコピーします。b + cが作成したコピーを削除するのは誰ですか?
クラスを2回処理せずに、またメモリの問題なしに+演算子を実装するためのより良い方法はありますか?
前もって感謝します
c - C質問の条件演算子
条件演算子について簡単な質問があります。ここではまだ新進のプログラマーです。x = 1、y = 2、z = 3 が与えられます。
なぜこの声明の後に知りたいのですか:
y は 5 です。ステートメントの後の値は、x = 0、y = 5、および z = 4 です。条件演算子が機能する方法は、次のようにフォーマットされていることを知っています。true の場合の値: false の場合の値。
条件 y += x-- の場合、y はどのように 5 になりますか? 可能性として 2 (2 += 0) と 3 (2 += 1) (x-- がゼロになる) しか見えません。どんな助けでも大歓迎です。:)
c++ - C++ - GCC を使用してコンパイルする場合、'operator=' に一致しません
私は最近、独自の共有ポインターと弱いポインターを作成しようとしました。Visual Studio を使用してコンパイルするコードは、GCC (4.5.0) ではコンパイルされず、次のエラーが発生します。
私のコードの最も重要な部分は次のとおりです。
1) 弱いポインターの実装 ( の宣言に注意してくださいoperator=
)
2) main.cpp
Q:
なぜこれが起こるのですか?私はおそらく単純な愚か者ですが、このコードの何が問題なのかわかりませんし、GCC の動作を理解することもできません。また、このコードがコンパイルされる理由と、MSVS で動作する理由を誰かが説明してくれれば幸いです (つまり、なぜ 1 つのコンパイラが正常に動作し、2 番目のコンパイラが失敗するのか)。ありがとうございました。
更新: 完全なコードとコンパイラ エラーは、ここで確認できます - http://codepad.org/MirlNayf
c++ - C++ での operator< の実装
次のようないくつかの数値フィールドを持つクラスがあります。
このクラスのオブジェクトを のキーとして使用する必要がありますstd::map
。したがって、私は実装しoperator<
ます。operator<
ここで使用する最も簡単な実装は何ですか?
編集:
の意味は<
、フィールドのいずれかが等しくない限り、一意性を保証するために想定できます。
編集2:
単純な実装:
この投稿の背後にある全体的な理由は、上記の実装が冗長すぎると感じたからです。もっと単純なものがあるはずです。
c++ - C++でのユーザー定義の変換
最近、O'ReillyMediaのC++ Pocket Referenceのコピーを閲覧していましたが、ユーザー定義型のユーザー定義変換に関する簡単なセクションと例に出くわしたとき、驚きました。
私はしばらくの間C++でプログラミングしてきましたが、この種の演算子のオーバーロードを見たのはこれが初めてです。この主題に関する本の説明はやや簡潔であり、この機能に関するいくつかの未回答の質問が残っています。
- これは特にあいまいな機能ですか?私が言ったように、私はしばらくの間C ++でプログラミングしてきましたが、これに出くわしたのはこれが初めてです。私はこれに関してもっと詳細な資料を見つけることができませんでした。
- これは比較的ポータブルですか?(私はGCC 4.1でコンパイルしています)
ユーザー定義のタイプへのユーザー定義の変換を行うことはできますか?例えば
演算子std::string(){/*コード*/}