58

私のC++コード(以下に示すように)に空の文字列として初期化された文字列がある場合、それはどのように問題になりますか:

std::string myStr = "";
....some code to optionally populate 'myStr'...
if (myStr != "") {
    // do something
}

対 no/null 初期化:

std::string myStr;
....some code to optionally populate 'myStr'...
if (myStr != NULL) {
    // do something
}

これに関するベストプラクティスや落とし穴はありますか?

4

6 に答える 6

78

empty()あなたのために用意された機能がありますstd::string:

std::string a;
if(a.empty())
{
    //do stuff. You will enter this block if the string is declared like this
}

また

std::string a;
if(!a.empty())
{
    //You will not enter this block now
}
a = "42";
if(!a.empty())
{
    //And now you will enter this block.
}
于 2012-07-19T08:03:27.067 に答える
28

落とし穴はありません。のデフォルトの構造はstd::stringです""。ただし、文字列を と比較することはできませんNULL。あなたが得ることができる最も近い方法は、メソッドを使用して、文字列が空かどうかを確認することstd::string::emptyです..

于 2012-07-19T08:03:38.577 に答える
22

一番:

 std::string subCondition;

これにより、空の文字列が作成されます。

これ:

std::string myStr = "";

コピーの初期化を行います - から一時的な文字列を""作成し、コピー コンストラクタを使用して を作成しますmyStr

ボーナス:

std::string myStr("");

直接初期化を行い、string(const char*)コンストラクターを使用します。

文字列が空かどうかを確認するには、empty().

于 2012-07-19T08:05:53.163 に答える
7

私は好むだろう

if (!myStr.empty())
{
    //do something
}

また、書く必要はありませんstd::string a = "";。あなたはただ書くことができますstd::string a;- デフォルトでは空です

于 2012-07-19T08:03:14.740 に答える
2

デフォルトのコンストラクターは、文字列を空の文字列に初期化します。これは、同じことをより経済的な言い方で表したものです。

しかし、NULL臭いとの比較。これは、まだ一般的に使用されている古い構文であり、別の意味があります。ヌル ポインター。周りに紐がないということです。

文字列 (存在する) が空かどうかを確認する場合は、empty代わりに次のメソッドを使用します。

if (myStr.empty()) ...
于 2012-07-19T08:06:35.923 に答える