Różne niuanse dot. C++

Jak wiemy, C++ potrafi płatać figle. Szczególnie jeśli naszym środowiskiem jest Visual Studio. Jednakże, poza tym, postanowiłem zebrać kilka przydatnych snipetów, o których nie chciałbym często i gęsto mówić. Zebrałem, będę uzupełniał, tak więc zapiszcie sobie adres do zakładek.

Ciekawe i przydatne rzeczy

Ustawianie precyzji bez względu na typ przekazanej zmiennej

Proszę jednak pamiętać, że funkcja zadziała prawidłowo przy zmiennych typu int, float, double oraz char. Za pozostałe - nie odpowiadam ;)

template <class usertype>
usertype set_precision(usertype r, int n)
{
  int a,b,x=0;
  if ( r == absolute_cast<usertype>(0) ) return absolute_cast<usertype>(0);
  if ( r < absolute_cast<usertype>(0) ) { x=1; r = r*(-1); }
  a = absolute_cast<int>(r);
  r = r-a;
  r = r*pow(10.0,absolute_cast<double>(n));
  b = absolute_cast<int>(r);
  r = absolute_cast<usertype>(a)+((absolute_cast<usertype>(b))/pow(10.0,absolute_cast<double>(n)));
  return (x==0)?r:(r*(-1));
}

Użycie:
double dPi = 3.1415;
dPi = set_precision(dPi, 2); // dPi => 3.14

Hint: Można przerobić funkcję, by zmienna przekazana była przez referencję. Ale to już inwencja własna.

Visual Studio swoje wie…

Inicjacja zmiennej typu float

float fPi = 3.1415f; // bądź (float)3.1415

Sprawdzanie warunku dla float

if ( fPi < absolute_cast<float>3.1415 ) {}
else {}

Użycie funkcji pow z biblioteki cmath

double pow(double, double);

Konwersja z std::String do CString

std::string strStdString ("Brzydkie słowo");
 
// konstruktor CStringa!
CString strCString (strStdString.c_str ());
To są notatki z wykładów, tak więc bardzo możliwe, że prawa autorskie należą do wykładowców...