Ještě jednou a lépe: kontrola na prázdný std::string v C++

Od Petr Zemek, 2013-11-09

Není pochyb o tom, že existuje spousta cest, jak zjistit, zda je řetězec prázdný. Kterou z nich ale zvolit a proč? To se dozvíte v dnešním příspěvku.

Původní kód

S následujícím kódem na otestování toho, zda je řetězec prázdný, se setkávám pravidelně:

std::string str;
// ...
if (str == "") {
    // ...
}

či někdy dokonce

if (str.size() == 0) {
    // ...
}

Proč takto raději ne?

První kód v podmínce výše říká: "je řetězec uložený v str roven prázdnému řetězci?". Druhý říká: "je délka řetězce str rovna nule?". Ani jeden z nich neříká přímo to, co chceme, ale implementuje způsoby, jak to zjistit.

Jak to udělat lépe?

Proč to řešit oklikou? Napišme přímo to, co chceme, aby se otestovalo:

if (str.empty()) {
    // ...
}

Kód se pak čte takto: "je řetězec uložený v str prázdný?". Toto je mnohem deklarativnější a z mého pohledu čitelnější přístup, než ty dva uvedené na začátku příspěvku.

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.

Filtrované HTML (využíváno)

  • Povolené HTML značky: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <table>
  • Zvýraznění syntaxe kódu lze povolit přes následující značky: <code>, <blockcode>, <bash>, <c>, <cpp>, <haskell>, <html>, <java>, <javascript>, <latex>, <perl>, <php>, <python>, <ruby>, <rust>, <sql>, <text>, <vim>, <xml>, <yaml>.
  • Řádky a odstavce se zalomí automaticky.
  • Webové a e-mailové adresy jsou automaticky převedeny na odkazy.
CAPTCHA
5 + 8 =
Vyřešte tento jednoduchý matematický příklad a vložte výsledek. Např. pro 1+3 vložte 4.
Nějak se mi tady rozmohl spam, takže poprosím o ověření.