C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

?->とは何ですか? C ++の演算子?


C++にはそのような演算子はありません。ラッパータイプを作成する必要がある場合があります。たとえば、unique_ptr、shared_ptr、optionalなどのタイプ。通常、これらの型には.getと呼ばれるアクセサメンバー関数がありますが、通常のポインタと同様に、含まれている値への直接アクセスをサポートする演算子→も提供します。

問​​題は、これらのタイプのいくつかが互いにネストされている場合があることです。これは、.getを複数回呼び出すか、値に達するまで多くの間接参照演算子を使用する必要があることを意味します。

このようなもの-

wrapper<wrapper<std::string>> wp;
wp.get().get().length();
wp.get()->length();

これは少し醜いことがあります。 1つの.get()を矢印に置き換えることができれば、2番目の.get()も置き換えることができれば便利です。このため、C++98では長い矢印演算子が導入されました。

wrapper<wrapper<std::string>> wp;
wp--->length();
別のラッピングレイヤーがある場合はどうなりますか?長い矢印を作成するだけです。

wrapper<wrapper<wrapper<std::string>>> wp;
wp----->length();

長い矢印は単一の演算子ではなく、複数の演算子の組み合わせです。この場合、通常の->演算子と後置デクリメント演算子-。

したがって、wp ----→length()と書くと、コンパイラーは((wp-)-)→length()を認識します。

接尾辞を間接参照演算子と同じになるように定義すると、長い矢印とさらに長い矢印演算子が得られます-

template <typename T>
class wrapper {
   public:
   T* operator->()    { return &t; }
   T& operator--(int) {  return t; }
   private:
   T t;
};

  1. C#の「is」演算子の目的は何ですか?

    C#の「is」演算子は、オブジェクトの実行時型が特定の型と互換性があるかどうかを確認します。 構文は次のとおりです。 expr is type ここでは、 expr 式です タイプ タイプの名前です 以下は、C#でのis演算子の使用法を示す例です。 例 using System; class One { } class Two { } public class Demo {    public static void Test(object obj) {       One x;       Two y;

  2. C#での演算子の優先順位は何ですか?

    演算子は、特定の数学的または論理的操作を実行するようにコンパイラーに指示する記号です。 演算子の優先順位は、式内の用語のグループ化を決定します。これは、式の評価に影響します。特定の演算子は他の演算子よりも優先順位が高くなります。たとえば、乗算演算子は加算演算子よりも優先されます。 以下は、演算子の優先順位を示す例です- 例 using System; namespace OperatorsAppl {    class Program {       static void Main(string[] args) {   &nbs