2012-05-05 6 views
3

size_t(0)を使用しているのは、次のコードで0と同じですか?私は0を入れたときに、あるC++スタイルと0からsize_t(0)への変換

const string foo = "testing"; 
    const size_t pos = foo.find("i"); 
    string name = foo.substr(size_t(0), pos); 

は、それがsize_t(0)に変換しているのですか?そうであれば、一方の形式が他方より優先されますか?私の推測では、変換を明示的にするので、t(0)が使用するのが最適です。一方、おそらく一部のプログラマーはsize_t(0)を冗長と考えていますか?私は実際には誰も気にしないと思います。

+0

C++で型キャストがサポートされているさまざまな構文の中で、 'type(arg)'は適切、可読性、明快さなどの点で最高ではありません。 –

+0

なぜですか?おそらく、 'type'が関数呼び出しとして読み込まれる可能性があるからでしょうか? – scottkosty

+0

はい、クラスのインスタンス化などです。 '(type)arg'の記述は、型キャストを意味するため、はるかに優れています。その後、カジュアルリーダーは推測する必要はありません。 'static_cast (arg)'はまだ専門化の面で優れています。 –

答えて

4

つまり、size_t(0)に変換されるのは0ですか?

basic_string substr(size_type pos = 0, 
        size_type count = npos); 

したがって、あなたのキャストは不要です。substrがあるので、

変換が暗黙的です。

+0

それは理由ではありません。それが暗黙的である理由は、メンバー関数がデフォルトパラメーターを使用して宣言されているということはできません。 – dalle

+1

@dalle:キャストを余計にレンダリングするのはデフォルト値ではありません。パラメータがsize_tなので、 '0'は自動的にsize_tに変換されます。 –

+0

@ JerryCoffin:はい、0は自動的にsize_tに変換されますが、関数の宣言とは関係ありません。 – dalle

1

0を同じ型の型にキャストしています。これは非常に優れた方法ですが、暗黙的に変換されるため、必要ではありません。

string substr (size_t pos = 0, size_t n = npos) const; 

チェックアウトthis

+2

IMOそれはかなり貧しい練習です - あなたは一般的に余分なキャストを避ける必要があります。 –

+0

いいえ、それは好まれません。 –