Giriş
C++14 ile geliyor. Literal'i std::string'e çevirir. Şu satırı dahil ederiz.
Eski kodlardaki string literal std::string'e dönüştürülmeyebilir. Elimizde şöyle bir kod olsun
İmzası şöyledir.
Şöyle yaparız.
s string literal encoding ön ekleri ile kullanılabilir. Şöyle yaparız.
C++14 ile geliyor. Literal'i std::string'e çevirir. Şu satırı dahil ederiz.
using namespace std::string_literals;
Açıklaması şöyle.It is a well-known annoyance that string literals better convert to bool than to std::stringNiçin lazım
Eski kodlardaki string literal std::string'e dönüştürülmeyebilir. Elimizde şöyle bir kod olsun
#include <iostream>
#include <string>
void f(std::string) { std::cout << __PRETTY_FUNCTION__ << '\n'; }
void f(std::string const&) { std::cout << __PRETTY_FUNCTION__ << '\n'; }
void f(bool) { std::cout << __PRETTY_FUNCTION__ << '\n'; }
int main() {
f("hello");
}
Çıktı olarak şunu alırız.void f(bool)
İmzasıİmzası şöyledir.
string operator "" s(const char* str, size_t len);
C++14 yoksa kendimiz şöyle yapabiliriz.
std::string operator""_s (const char* cs, size_t)
{
return std::string(cs);
}
Null Karakter Ekleme
string literal'ın en önemli faydalarından birisi null karakter eklemeyi kolaylaştırması
Örnek
Elimizde şöyle bir kod olsun.
Elimizde şöyle bir kod olsun.
Diğer
Örnek
Elimizde bir variant olsun.string literal'ın en önemli faydalarından birisi null karakter eklemeyi kolaylaştırması
Örnek
Elimizde şöyle bir kod olsun.
std::string str = "foo\0bar";
Bu durumda std::string sınıfının const char* alan constructor metodu çağrılır. Ancak bu constructor sadece null karakterine kadar olan kısmı alır. String Literal içinde \0 karakterini kullanmak için şöyle yaparız.std::string s = "foo\0bar"s; // s contains a \0 in its middle.
std::string s2 = "foo\0bar"; // equivalent to "foo"s
ÖrnekElimizde şöyle bir kod olsun.
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";
}
Çıktı olarak şunu alırız.s1: 3 "abc"
s2: 8 "abc^@^@def"
Örnek
std::map<std::string, boost::variant<int, std::string, bool> > values;
Bu variant'a std::string değer atamak için şöyle yaparız.using namespace std::string_literals;
values["b"] = "foo"s;
Örnek
Şöyle yaparız.
using namespace std::string_literals;
std::cout << "3"s + "4"s;
Örneks string literal encoding ön ekleri ile kullanılabilir. Şöyle yaparız.
std::string s = "hello world"s;
std::u16string s16 = u"hello world"s;
std::u32string s32 = U"hello world"s;
std::wstring ws = L"hello world"s;
Hiç yorum yok:
Yorum Gönder