2017-09-01 18 views
-1

autoを使用せずにこのようにvoidポインタを宣言しました。autoを使用してvoidポインタを宣言するにはどうすればよいですか?

void* ptr = nullptr; 

どのように我々はautoを使用して同じことを行う必要がありますか?どちらを使うべきですか?それとももっと良い方法がありますか?

auto ptr = (void*)nullptr; 
auto ptr = (void*)0; 

これはコーディングスタイルについての質問ではありません。 autoを使用する必要がある場合は、何が最善の方法であるべきかを知りたいだけです。

+10

元のバージョンで何が問題になっていますか? – Praetorian

+0

@Praetorian何もありません。コーディングスタイルとの一貫性を保つために 'auto'を使うだけです。 –

+6

@ user1869785なぜでしょうか。このようなことにautoを使うことは、過度で不明確です。単に '' '' void * '' '' 'をつけてください。 – mascoj

答えて

3
auto ptr = static_cast<void*>(nullptr); 

あなたはおそらく知っているようにはstatic_castの両方がconstとして捨てないように、と狂気のスタッフreinterpret_castはを可能にしながら、Cスタイルのキャストは、彼らは基本的に何でも投げますので、それほど大きくはありません。

+1

ありがとう!私はこれがまさに私がコーディングスタイルの議論にあまり踏み込まなければ欲しいものだと思う:) –

+5

しないでください。あなたがタイプを知らない場合、タイプが変わる可能性がある場合、またはそのタイプが非常に不敬に長く混乱している場合は、オートを使用する必要があります。この場合、型を知っています。型は変更されず、 '' '' void * '' '' 'はポインタ型と同じくらい短いものです。 – mascoj

+1

@mascojこれはopsスタイルの選択肢を議論するフォーラムではありません。いずれにしても強い気持ちはありません。あなたはそれが気に入らないかもしれませんが、それはC++コミュニティ内では妥当な立場です。私はあなたがSuttersの記事をほぼ常にauto、iircで読むことをお勧めします。彼はここでautoをお勧めします(そして彼は私のようにあなたのステートメントに完全に同意しません)。 –

0

宣言時にタイプをすでに知っている場合は、リットルの理由autoがあります。他の人に言われているように、元のスタイルはあなたが望むものでなければなりません。これはあなたのコードを簡潔かつ明確に保ちます。

void* ptr = nullptr; 

何らかの理由であなたは自分のコントロール外のスタイルをコーディング好奇心のためかのように、autoを使用するようにしているか、あなたがautoの大ファン、ニールの答えで述べたようにstatic_cast<void*>している場合よりも良い選択肢だろう実行時に(後者)失敗するCスタイルのキャストを使用しています。キャストなし

auto ptr = static_cast<void*>(nullptr); 

リファレンス

+1

Cスタイルのキャストは「実行時に失敗する」ことがどのくらい正確にできますか? –

1

代替:

using void_ptr = void*; 
auto ptr = void_ptr{}; 

または

auto ptr = std::add_pointer_t<void>{};