3

次の内容を含む別の開発者のコ​​ードをレビューしています。

std::string name;
...
std::string::size_type colon = name.find(":");

STL 標準では isとisと規定されているため、 using を使用したsize_t方が理解しやすく、安全であると主張しています。std::stringstd::basic_string<char, std::allocator>std::allocator::size_typesize_t

彼は、STL 標準が変更されてこの仮定が無効になる可能性は決してないという保証を望んでいます。標準が変更size_typeされる可能性がある場合は、size_t.

それは起こり得るでしょうか?size_type以外に使用する理由はありますsize_tか?

4

2 に答える 2

8

size_typeコンテナー タイプでテンプレート化されたコードで使用する必要があります。あなたがいつも持っているコードが で動作するときstd::string、あなたはただ使うことができますsize_t

于 2012-05-09T16:22:49.883 に答える
6

auto最善の方法は、関数が返すものに自動的に準拠できるようにすることだと思います。

auto colon = name.find(":");

あなたが説明している問題を回避し、はるかに短くなります。

structlarsmans がコメントで言及しているように、戻り値の型を取得する変数を使用せずに、文字列インデックスを a などに格納したい場合があります。それも可能です:

struct StoreStringIndex {
    decltype(declval<std::string>().length()) length;
};

しかし、それよりも複雑で短くはありませんstd::string::size_type。したがって、ものを保存するには、おそらくタイプの を使用したいと思うでしょうsize_typeが、ローカル変数などにはauto.

于 2012-05-09T16:23:22.130 に答える