Bu çalışma sorusu Herb Sutter‘ın “More exceptional C++” isimli kitabından alınarak değiştirilmiştir. Aşağıdaki kodun standart çıkış akımına ne yazdıracağını tahmin etmeye çalışın. Daha sonra
Etiket: şablonlar
şablon sabit parametreleri – 1 (template non-type parameters)
Şablon sabit parametrelerine (template non-type parameters) ilişkin ilginç bir özellik var: Bir şablon sabit parametresi, bir şablon tür parametresi (type parameter) türünden olabiliyor. Biraz karmaşık
1’den 100’e kadar tamsayıları yazdırmak
Programcılara biraz da eğlence olsun diye sorulan popüler sorulardan biri bu: 1‘den 100‘e kadar tamsayıları bir döngü deyimi, bir goto deyimi ya da özyineleme
bir işlev çağrısını yalnızca belirli bir türden argümanla sınırlamak
Bir işlevimiz var ve bu işlevin yalnızca belirli bir türden argümanla çağrılabilmesini güvence altına almak istiyoruz:
1 |
void func(int); |
Amacımız yukarıdaki gibi bildirilen bir işlevin yalnızca
derleme zamanında dizi boyutu
C’nin meşhur işlevsel makrosunu bilmeyen var mı?
1 |
#define asize(a) (sizeof(a) / sizeof((*a))) |
Ama C++ dilinde işlevsel makroları istemiyoruz, değil mi? C++ 11 ile gelen constexpr işlevler dizi boyutunun
sizeof değerinin derleyici hata mesajından alınması
Bir nedenden dolayı (bu neden ne olabilir o da ayrı bir soru) bir türe ilişkin sizeof değerini derleyicinin bize vereceği bir hata mesajından öğrenmek
enable_if
type_traits başlık dosyası içinde yer alan enable_if sınıf yapısı C++11 ile türden bağımsız programlamaya ilişkin gelen en önemli desteklerden biri:
1 2 3 4 5 |
template<bool B, class T = void> struct enable_if {}; template<class T> struct enable_if<true, T> { typedef T type; }; |
Önce bu şablonları bir
C++ çalışma sorusu – 36
C++11 standartlarına göre aşağıdaki C++ programı çalıştırıldığında bu programın çıktısı ne olur?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> template<typename T> void func(T x) { static int count = 0; ++count; std::cout << count; } int main() { char c1 = 0; signed char c2 = 0; unsigned char c3 = 0; func(c1); func(c2); func(c3); } |
Sorunun yanıtı şu seçeneklerden biri de olabilir: Sentaks hatası (derleme zamanı
C++ çalışma sorusu – 29
C++11 standartlarına göre aşağıdaki C++ programı çalıştırıldığında bu programın çıktısı ne olur?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#include <iostream> #include <utility> int func(int &) { return 1; } int func(int &&) { return 2; } template <typename T> int f1(T &&x) { return func(x); } template <typename T> int f2(T &&x) { return func(std::move(x)); } template <typename T> int f3(T &&x) { return func(std::forward<T>(x)); } int main() { int ival = 10; std::cout << f1(ival) << f1(20); std::cout << f2(ival) << f2(20); std::cout << f3(ival) << f3(20); return 0; } |
Sorunun yanıtı şu seçeneklerden biri de olabilir: Sentaks hatası (derleme zamanı
C++ çalışma sorusu – 26
C++11 standartlarına göre aşağıdaki C++ programı çalıştırıldığında bu programın çıktısı ne olur?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> template <class T> void func(T &x) { std::cout << "1"; } template <> void func(const int &x) { std::cout << 2; } int main() { int ival = 0; func(ival); } |
Sorunun yanıtı şu seçeneklerden biri de olabilir: Sentaks hatası (derleme zamanı