Forum: Diğer Konular RSS
C++ 11 Boost Kütüphanesi
İbrahim #1
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: C++ 11 Boost Kütüphanesi
Merhabalar;
C++ 11 ile bazı boost dosyaları standart olmuş diye biliyorum. Boost'u sitesinden indirip kullanabiliyorum fakat standartta hangi dosyaları #include ediyoruz (Boost asio)? Tam olarak nette bulamadım.

Teşekkürler!
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Tam liste bulamadım ama şurada bir kaç tanesi (belki de tamamı) var:

  https://meetingcpp.com/index.php/br/items/c11-and-boost.html

Onları aşağıdaki sitede aratınca başlık dosyaları görülüyor:

  http://en.cppreference.com/w/

Örneğin, sağ yukarıdaki Search kutusuna shared_ptr yazınca şu sayfa geliyor:

  http://en.cppreference.com/w/cpp/memory/shared_ptr

shared_ptr, <memory> başlık dosyasındaymış...

Ali
İbrahim #3
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler.
Sanırım Boost.Asio standart olmamış.
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ne kadarının Boost'tan geldiğini bilmiyorum ama o konuda yenilikler var:

  https://en.wikipedia.org/wiki/C%2B%2B11#Threading_facilities

Ali
İbrahim #5
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Merhaba;
Eğer Boost asio standart olmadıysa (ki araştırmalarıma göre olmamış, ayrıca derleyicide bulamadım) o zaman şu şekilde #include direktiflerini nasıl çağırmışlar?
#include <iostream>
#include <boost/array.hpp> // -> < ... > içinde
#include <boost/asio.hpp> // -> < ... > içinde 
Bu şekilde çağırma bildiğim kadarıyla standart kütüphanelerde oluyor. Çünkü bu kütüphaneler derleyicinin bulunduğu klasörler içinde tutuluyor.
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
(Not: Bu konu tamamen C ve C++ ile ilgili.)

Eskiden ben de öyle sanıyordum: standartsa açılı parantez, standart değilse çift tırnak diye biliyordum.

Tek fark, derleyicinin o başlıkları nerelerde ve hangi yöntemle aradığıymış. Şimdi aratınca, standardın 6.10.2 bölümünde olduğunu öğreniyorum:

  • Açılı parantezli başlıklar bütünüyle o gerçekleştirmeye (implementation; yani, derleyiciye) bağlı bir biçimde aranır ve bulunurlarmış. Bu maddede dosya lafı geçmiyor. Dolayısıyla, <string> diye eklendiğinde sistemde öyle bir dosya olmayabilir ve içerik derleyiciye ait bambaşka bir biçimde de eklenebilir.

  • Çift tırnaklar kullanıldığında ise bir dosyadan bahsediyoruz. O dosyanın nerede bulunduğu yine derleyiciye kalmıştır. İşin ilginci, eğer böyle bir dosya bulunamazsa, derleyici açılı parantez kullanılmış gibi tekrar işlem görürmüş. Dolayısıyla, "string" diye eklesek ama öyle bir dosya olmasa, <string> olarak eklenmiş gibi ekleniyormuş ve o biçimde bulunuyormuş.

Ek olarak, standart olsa artık boost klasörü bulunmaz ve örneğin <asio> diye eklenir.

Ali
İbrahim #7
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yeni bilgi için teşekkürler. Bununla ilgili bir soru da şu: Mesela <string>, <memory>, <QPointer> vs. şeklinde kullanıyoruz. Peki biz kendi yaptığımız dosyayı nasıl böyle kullanabiliriz? Yani biz kendi dosyamızı <code.h> <code.cpp> vs diye çağırıyoruz ama <code> gibi çağıramıyoruz.

2. soru: Kodlarda işaretçiler (mesela int* a;) yerine akıllı işaretçiler (mesela QPointer<int> a(new int); veya standart c++ akıllı işaretçileri) kullansak hız, güvenilirlik vs. sorunlar oluşur mu?

3. olarak da Windowsta şu kod çıktı verirken Linuxta yani g++'da çıktı vermiyor, neden olabilir?

void reverse(char* str)
{
  for (int i; i < strlen(str); i++)
  {
    char c = str[i];
    str[i] = str[strlen(str) - i - 1];
    str[strlen(str) - i - 1] = c;
  }
}
 
int main()
{
  char* str;
  cin >> str;
  cout << str << endl;
}
Bu mesaj 2 defa değişti; son değiştiren: İbrahim; zaman: 2015-10-27, 12:19.
acehreli (Moderatör) #8
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yukarıdaki kuralları izlersek, açılı parantez kullanılınca senin dosyalarına bakılmıyor bile. Ama eğer kendi dosyanın adını code yaparsan ve "code" diye eklersen olur.

Ali
acehreli (Moderatör) #9
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Hayır, D ve C++ gibi diller hızdan ödün vermezler.

Ali
İbrahim #10
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yani mesela iostream dosyasına bakıyorum .h, .cpp vs. uzantısı yok. Biz de mi uzantı koymayalım?
acehreli (Moderatör) #11
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Öncelikle, eski mesajları değiştirmek okuyan için çok külfetli oluyor çünkü baştan tekrar okumak ve eski halinden ne fark olduğunu anlamaya çalışmak gerekiyor. Ama eğer yeni bir mesaj yazarsan yeni yazılanın ne olduğu hemen görülüyor.

Bazı arkadaşlar mesaj tasarrufunun bir etkisi olduğunu düşünüyorlar. Örneğin, benim Ceviz.net'e artık dayanamayışımın tek nedeni, Ceviz'in salak forum programının aynı kişiden art arda gelen farklı mesajları birleştirmesiydi. Mesaj sayısını azaltmanın hiçbir yararı yoktur. O yüzden, sen de lütfen her yeni metni ayrı mesaj olarak yaz.

Hatta, dikkat edersen konu artık "C++ 11 Boost Kütüphanesi" değil. O yüzden yeni sorularını kendi konuları olarak yeniden aç. Gerçekten, forumda bir milyon konu olmasıyla üç milyon konu olması arasında bir performans kaybı olmaz.

Gösterdiğin C++ programında tanımsız davranış olduğundan ne yapacağı bilinemez o yüzden iki derleyicinin davranışı karşılaştırılamaz. (Buradaki tanımsız davranış, str'ın ilklenmemiş olmasından kaynaklanıyor.)

Ali
acehreli (Moderatör) #12
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #10
İbrahim:
iostream dosyasına bakıyorum

Yukarıda C++ standardından aktardığım bilgiyi tekrar okursan iostream'in bir dosya olmak zorunda olmadığını göreceksin. Onlar başlıktır (header). <iostream>, o başlığı temsil eder; o başlık örneğin bellekte de durabilir.

.h, .cpp vs. uzantısı yok. Biz de mi uzantı koymayalım?

Kesinlikle koy tabii ki. Hem herkes öyle yapıyor hem de öyle yaparsan metin düzenleyicin kodu güzel güzel renklendirebilir.

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 00:34:27 (UTC -08:00)