27 Mart 2017 Pazartesi

std::time metodu

Giriş
Şu satırı dahil ederiz.
#include <ctime>
Şöyle yaparız.
auto t = std::time (nullptr);
Aslında nullptr yerine bir bellek alanı da geçilebilir. Açıklaması şöyle
If tloc is non-NULL, the return value is also stored in the memory pointed to by tloc.
Ancak pratikte bu yapılmamalı çünkü sadece eski kodlar bu yöntemi kullanıyor. Açıklaması şöyle
The tloc argument is obsolescent and should always be NULL in new code.

20 Mart 2017 Pazartesi

std::wifstream

Giriş
Bu sınıf std::ifstream ile aynı. Sadece okuma metodlarında wchar_t döndürüyor.

Constructor - wchar_t - Portable değil !
Sınıfın ismi wifstream olmasına rağmen wchar_t ile kurulan bir constructor vermiyor. Visual Studioa'da şöyle yaparız.
std::wifstream f(L"C:/äöå/file.xml");

15 Mart 2017 Çarşamba

std::isinf

Giriş
C++11 ile geldi. Şöyle yaparız.
float x = ...;

if (std::isinf (x))
{
  ...
}
Eğer C++11 kullanmak mümkün değilse şöyle yaparız.
if ((x == +std::numeric_limits<float>::infinity()) || 
     (x == -std::numeric_limits<float>::infinity())
    ) {...}

14 Mart 2017 Salı

assert

Nasıl Kullanırız
assert macrosunu kullanmak için C programlarında şu satır dahil edilir.
#include <assert.h>
C++ programlarında ise şu satırı dahil edilir.
#include <cassert>
Macro'nun İçin Nasıldır
assert sadece debug derlenmiş kodlarda çalışır. İçi şöyledir.
#ifdef NDEBUG
    #define assert(x) ((void)0)
#else
    #define assert(x) ((x) ? (void)0 : abort())
#endif
Debug kodlarda NDEBUG tanımlı değildir.. Dolayısıyla assert etkindir. Release kodlarda ise NDEBUG tanımlı olduğu için assert boşa çıkar yani çalışmaz.

gcc'de Release Moda Geçmek İçin
gcc ile release kodu derlemek için şöyle yapmak gerekir.

gcc blablabla -DNDEBUG blablabla

Kod İçinden Release Moda Geçmek İçin
Şöyle yaparız.
#define NDEBUG#include<assert.h>

int main(){
  int x = 0;
  assert (x!=0);  
}
Derleyicinin seçeneklerinde -DNDEBUG tanımlı olmasa bile artık tanımlıdır. Açıklaması şöyle
The assert macro is redefined according to the current state of NDEBUG each time that is included.

Kendi Assert Macromuz
Dosya ve Satır ile exception fırlatmak için şöyle yaparız.
void ASSERT(const bool cond, const std::string& text, const std::string& file,
  const int line)
{
  if (!cond)
  {
    throw std::runtime_error(text + ". In file: " + file +
      " on line: " + std::to_string(line));
  }
}

#define ASSERT(cond, text) ASSERT(cond, text, __FILE__, __LINE__)
İstersek aynı assert gibi davranıp std::abort() çağrısı da yapılabilir. Bu durumda daha gelişmiş bir assert elde ederiz. Şöyle yaparız.
void ASSERT(const bool cond, const std::string& text, const std::string& file,
 const int line)
{
  if (!cond)
  {
    std::cout << text << ". In file: " << file << 
      " on line: " << line << std::endl;
    std::abort();
  }
}

#define ASSERT(cond, text) ASSERT(cond, text, __FILE__, __LINE__)

8 Mart 2017 Çarşamba

std::chrono::system_clock::duration Sınıfı

Giriş
İki time point'in farkını temsil eder.

max metodu
Şöyle yaparız.
std::chrono::system_clock::durat‌​ion::max()

6 Mart 2017 Pazartesi

std::to_wstring

Giriş
std::to_string() ile kardeştir.

int
Şöyle yaparız.
int i = 100;
std::wstring iStr = std::to_wstring(i);