LinkedListNode* toSort = new LinkedListNode((MTNode*)0, (LinkedListNode*)0,
(LinkedListNode*)0);
誰かが私にこのコードを読む方法の詳細な説明を教えてくれますか? 特に、私はもう少し現代のC++ではC++新しいコンストラクタコードの作成方法を読むには?
(MTNode*)0, (LinkedListNode*)0,(LinkedListNode*)0
LinkedListNode* toSort = new LinkedListNode((MTNode*)0, (LinkedListNode*)0,
(LinkedListNode*)0);
誰かが私にこのコードを読む方法の詳細な説明を教えてくれますか? 特に、私はもう少し現代のC++ではC++新しいコンストラクタコードの作成方法を読むには?
(MTNode*)0, (LinkedListNode*)0,(LinkedListNode*)0
でこれらのゼロを理解していない、それは次のようになります。
LinkedListNode* toSort = new LinkedListNode(nullptr, nullptr, nullptr);
それが今より理にかなっていますか?期待されるポインタごとにヌル値を渡すだけです。
リテラル0は、ポインタが必要なnullポインタを指定します。関連するポインタ型へのキャストは冗長です。 、現代のC++ではちょうどnullptr
を書き、そして好ましくは、コンストラクタの呼び出しのために中括弧を使用する、すなわち
auto* toSort = new LinkedListNode{ nullptr, nullptr, nullptr };
注:
リテラル0引数を受け取る2つの以上のオーバーロードがある¹ない限り、その場合、キャストはコールをあいまいにするのに役立ち、正しいコンストラクタを選択します。
または単に 'auto'です。 –
auto *とautoはどのように違いがありますか? 同じですか? – justCurious
@JinJung:技術的には、最終的には同じタイプが得られます。 'auto *'はそれがポインタ型であることを明示的に読者に知らせる。コスト:余分な1文字。しかし、その情報は 'new'式からも容易に入手できます。それはスタイルと個人的な好みの問題です。私はその証言を好きで、他のいくつかは単に「自動」の簡潔さを好む。 –
は LinkedListNode * toSort =新しいLinkedListNode(nullptr、nullptr、nullptr)を持ってしても大丈夫でしょう。 、次に auto list = toSort; リスト=新しいLinkedListNode(ptr1、ptr2、ptr3); これは大丈夫ですか? – justCurious
@JinJung:構文とタイプの面では?はい。しかしそれはすぐにそれを上書きするためだけにポインタをコピーすることは奇妙に思えます。あなたはそれがあなたが意図したものだと確信していますか? –
@JinJung、私はここで危険な水の中を歩いていると感じています。変数を初期化せずに使用しないでください。どちらにかかわらず、プログラミングに関してさらに質問がある場合は、別のSOの質問として投稿してください。 – StoryTeller