Home

ITA - Appunti Cpp 006 - If Else

linux cpp

Esempi base per if-else:

#include <iostream>

int main()
{
    // semplice if-statement
    int i = 2;
    if (i > 2)
        std::cout << i << " maggiore di 2\n";
    else
        std::cout << i << " non maggiore di 2\n";

    // if-statement annidati
    int j = 1;
    if (i > 1)
        if (j > 2)
            std::cout << i << " > 1 e " << j << " > 2\n";
        else // questo else è parte di if (j > 2), non di if (i > 1)
            std::cout << i << " > 1 and " << j << " <= 2\n";

    // declarations can be used as conditions with dynamic_cast
    // le dichiarazioni di oggetti possono esere condizioni con dynamic_cast
    struct Base
    {
        virtual ~Base() {}
    };

    struct Derived : Base
    {
        void df() { std::cout << "df()\n"; }
    };

    Base* bp1 = new Base;
    Base* bp2 = new Derived;

    if (Derived* p = dynamic_cast<Derived*>(bp1)) // cast fallisce, viene ritornato nullptr
        p->df(); // non eseguito

    if (auto p = dynamic_cast<Derived*>(bp2)) // cast ha successo
        p->df(); // eseguito
}

Note

Gestione dello scope:

if (x)
    int i;
// i non è più in scope

// è lo stesso di

if (x)
{
    int i;
}
// i non è più in scope

e anche:

if (int x = f())
{
    int x; // errore: ridichiarazione di x
}
else
{
    int x; // errore: ridichiarazione di x
}

Riferimenti