Giriş
Gramer şöyle.
Şöyle yaparız.
Şu kod birden fazla "structured binding" kullandığı için derlenmez
Gramer şöyle.
selection-statement:
if ( init-statement condition )
init-statement:
simple-declaration
simple-declaration:
decl-specifier-seq init-declarator-list;
decl-specifier-seq ref-qualifier [ identifier-list ] initializer ;
Yapısı şöyle. Bu kullanımın tüm amacı if işleminin sonucunu alan değişkenin scope alanını küçültmekif (init-statement; condition) statement
Örnek
Eskiden şöyle yapardık. result değişkeni if bloğunun dışında yaşamaya devam ederdi.
bool result = foo();
if( result ) {
std::cout << "True!\n";
} else {
std::cout << "False!\n";
}
Şimdi şöyle yaparız.
if( bool result = foo(); result ) {
std::cout << "True!\n";
} else {
std::cout << "False!\n";
}
Örnek
Şöyle yaparız. r false ise do doSomething() çalışır.
Şöyle yaparız. r false ise do doSomething() çalışır.
if (auto r = getGlobalObjectByName(word); !r) r->doSomething;
Örnek
Biraz daha karışık kodlar ortaya çıkabiliyor. Şöyle yaparız
int bar();
bool query();
void foo(int, bool);
int main()
{
if (int x = bar() ; bool y = query())
{
foo(x, y);
}
else
{
foo(x * 2, y);
}
}
If Statement ve Structured Binding
Açıklaması şöyle.
A simple-declaration is either a comma separated list of declarators that introduce objects of the same type (decl-specifier-seq init-declarator-list;) or a single structured binding (the second, rather verbose line under simple-declaration).Örnek
Şöyle yaparız.
std::map<int, std::string> Map;
// ...
if (auto[it, inserted] = Map.insert(std::pair(10, "10")); inserted)
; // do something with *it.
ÖrnekŞu kod birden fazla "structured binding" kullandığı için derlenmez
if (auto[iter, success] = set.insert("Hello"),
[iter2, success2] = set.insert("Foo"); success && success2)
{}
else
{}
Şöyle yaparızif (auto[iter, success, iter2,success2] =std::tuple_cat (set.insert("Hello"),
set.insert("Foo")); success && success2)
{}
else
{}
Hiç yorum yok:
Yorum Gönder