web-dev-qa-db-ja.com

C ++でsサフィックスを使用する利点

私の質問は、C++での「s」サフィックスの使用に関連していますか?

「s」サフィックスを使用したコードの例:

auto hello = "Hello!"s; // a std::string

同じように書くことができます:

auto hello = std::string{"Hello!"};

間違いを最小限に抑え、コード内の意図を明確にするために、「s」サフィックスを使用する必要があることをオンラインで見つけることができました。

したがって、「s」サフィックスの使用は、コードの読者のみを対象としていますか?それとも、その使用に他の利点がありますか?

12
Rpessoa

ヌル文字は、生の文字列に簡単に含めることができます。 http://en.cppreference.com/w/cpp/string/basic_string/operator%22%22s の例

int main()
{
    using namespace std::string_literals;

    std::string s1 = "abc\0\0def";
    std::string s2 = "abc\0\0def"s;
    std::cout << "s1: " << s1.size() << " \"" << s1 << "\"\n";
    std::cout << "s2: " << s2.size() << " \"" << s2 << "\"\n";
}

可能な出力:

s1: 3 "abc"
s2: 8 "abc^@^@def"
17
UKMonkey

したがって、「s」サフィックスの使用は、コードの読者のみを対象としていますか?

いいえ、それはコードの読者だけでなく、リテラルから作成する正確な型をコンパイラーに指示します。

それとも、その使用に他の利点がありますか?

確かに:そのコードを短く書くことには利点がありますが、それでも必要なタイプが得られます

auto hello = "Hello!"s;

お気づきのように、これはstd::stringを作成し、書くのと同じです

auto hello = std::string{"Hello!"};

、一方、

auto hello = "Hello!";

const char*配列を指すconst char[7]ポインタを作成します。

5
user9212993