if - Abfrage in Initialisierungsliste



  • Hallo ihr Lieben,

    mir kam die Frage in den Sinn, ob ich folgende if-Abfrage im Konstruktorrumpf in die Initialisierungsliste nehmen kann. Das hätte dann den Vorteil, dass ich die Variable _var als const deklarieren könnte.

    Führt das zur Anwendung der Lambdafunktion?

    class foo
    {
    	public:
    		foo(double);
    	private:
    		double _var;
    };
    
    foo::foo(double x)
    {
    	if(x > 10.0)
    		_var = x;
    	else
    		_var = 10.0;
    }
    

    Gruß,
    -- Klaus.



  • foo::foo(double x) : _var(x > 10.0 ? x : 10.0) { }
    

    Oder

    foo::foo(double x) : _var(std::max(x, 10.0)) { }
    


  • in diesem Fall ists einfach:

    foo::foo(double x)
    : _var( x>10 ? x : 10) {}
    

    du kannst aber auch eine normale Funktion verwenden (zB eine class static) und
    _var( calculate_value(x) )
    .



  • foo::foo(double x)
    : m_x (x >= 10 ? x 
                   : 10) 
    {}
    


  • pumuckl schrieb:

    besser std::min nehmen 😉

    Das wäre in diesem Fall nicht gut, glaub ich.


  • Mod

    pumuckl schrieb:

    besser std::min nehmen 😉

    Man Will das Größere von beiden. (Edit: Zu lahm)



  • Klaus82 schrieb:

    Das hätte dann den Vorteil, dass ich die Variable _var als const deklarieren könnte.

    Vor "move" waren const Member toll. Mit "move" ist leider alles komplizierter geworden. Aber darum geht's ja nicht.

    Klaus82 schrieb:

    Führt das zur Anwendung der Lambdafunktion?

    Welche Lambdafunktion?


  • Mod

    hustbaer schrieb:

    Klaus82 schrieb:

    Führt das zur Anwendung der Lambdafunktion?

    Welche Lambdafunktion?

    Wahrscheinlich meinte er die Variante

    foo::foo(double x)
    : _var( [=]{ if( x>10 ) return x; return 10; }() ) {}
    

    Wobei es mir ein Rätsel ist, wie man von Lambdas gehört und nicht einmal den ternären Operator kennt...



  • Arcoth schrieb:

    Wahrscheinlich meinte er die Variante

    foo::foo(double x)
    : _var( [=]{ if( x>10 ) return x; return 10; }() ) {}
    

    Wobei es mir ein Rätsel ist, wie man von Lambdas gehört und nicht einmal den ternären Operator kennt...

    Feine Alternative. Dann kann ich den Ternären endlich in die Schublade stecken, wo goto und switch drin liegen.



  • Hui,

    vielen Dank für die ganzen Antworten! 🙂

    Arcoth schrieb:

    Wobei es mir ein Rätsel ist, wie man von Lambdas gehört und nicht einmal den ternären Operator kennt...

    Tja, ich stecke voller Überraschungen - kommt auf meine todo Liste.

    Viele Grüße,
    -- Klaus.



  • seldon schrieb:

    pumuckl schrieb:

    besser std::min nehmen 😉

    Das wäre in diesem Fall nicht gut, glaub ich.

    Verdammt da guck ich nach Ewigkeiten mal hier rein und verzapfe gleich son Blödsinn oO


Log in to reply