Thread overview
constexpr
May 12, 2018
hsencan
May 13, 2018
kerdemdemir
May 12, 2018

Merhabalar kod incelerken karşıma çıkan "constexpr" ifadesi nedir,ne işe yarıyor ? Benim anlayabildiğim kadarı ile işlemleri derleme zamanında yapmamızı sağlıyor. Bu zaten yavaş derlemesi olan C++ için ne kadar mantıklı olur ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 13, 2018

Evet dedigin gibi programimizi daha cok derleme zamaninda isletibilir hala getiriyor.

C++14 oncesi yani C++11'de derleme zamaninda kodlarin isletilmesi fonksiyonlari tekrar tekrar cagirarak oluyordu ki bence cok acayip bir sey. Acaba artiyormudur derleme zamanini boyle olmasi?

// C++11 if veya for koyamiyoruz.
constexpr int factorial(int n)
{
   return n <= 1 ? 1 : (n * factorial(n - 1));
}

//C++14
constexpr int factorial14(int n)
{
   int returnVal = 1;
   for ( int i = 2; i < n ; i++ )
        returnVal *= n;
   return returnVal;
}

Gerci C++ sablonlarindada boyle acayipler goruyorum hep. Insanlar mutlu boyle sanki.

Ben derleme zamani nedeniyle sablonlari yasaklayan is yerleri gorum ama constexpr'i yasaklayan gormedim daha.

Erdemdem

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 13, 2018

constexpr, ifadenin derleme zamanında işletilebileceğini belirtiyor. Derleme zamanında ifade işletmek çok yararlı bir olay ama biz D'ciler bu iş için neden bir anahtar sözcük gerektiğini anlamıyoruz çünkü D'de derleme zamanında gereken her ifade zaten derleme zamanında işletilmeye çalışılır; çalışırsa çalışır, çalışmazsa derleme hatasıdır. Yani, özel bir anahtar sözcüğe gerek olmamalıdır.

Aslında çok önemli bir kavram. D'de çok işe yarıyor. Evet, derleme zamanını yavaşlatır ama programın çalışma zamanını azaltır. Bu, eniyileştirme konusunda da olan bir şey: derleyici çok çalışır ama çalışma zamanı hızlanır...

Bir örnek olarak D'nin ctRegex'ini verebiliriz. Verilen düzenli ifade (regular expression) dizgisini derleme zamanında işler ve tam da o dizgiye uygun olan bir düzenek kurar. Yani, normalde çalışma zamanında "bakayım bu dizgide ne isteniyormuş" diye bakılması yerine, "biliyorum, tam bu noktada şunu bulmam gerekiyor" diyen özelleştirilmiş bir düzenek çalışır. O düzenek, derleme zamanında işletilen kod sonucunda kurgulanır.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]