2016-03-24 16 views
1

次の機能に違いはありますか?どちらか一方を好む理由がありますか?あなたは違いがない与えているスニペットでポインタを格納するときのautoとautoの違い*

auto p = new C(); 

auto* p = new C(); 
+1

違いはありませんが、どちらを使用してもかまいません。しかし、 'auto *'が使われているときに、式がポインタ型でない場合は、コンパイラエラーが発生しますが、前者の場合はそうではありません。 – 0x499602D2

+0

'auto'がポインタを追加します。それは同じです – DimChtz

答えて

1

。コンパイラはpがいずれかの方法でCへのポインタになることを推論します。

より一般的なケースでは、違いがあります。

auto *p = func(); 

auto p = func(); 

func()がポインタではない何かを返しますが、2番目がない場合は最初の形式は、エラーメッセージが発生します。これは、func()intではなくポインタを返すという要件を強制する必要がある場合(テンプレート付きコードなど)には便利なことがあります。 [しかし、確かに、そのような要件を実施するためには、より多くの明確かつ強力な方法があります。

+0

私はあなたが望むならば、ポインタが 'const'であることを宣言することを可能にする' auto * 'を使うことにさらなる利点があることを示唆しています: ' const auto * const p = func(); ' –