2016-03-26 5 views
1

Ich möchte die Definition verwenden „und“ und „oder“ wenn die Werte der Variablen definieren, wieUnd oder Anweisung, wenn ein Wert

int i = true && 5 || 3; 

Wie Sie in Sprachen würde, wie Lua, wo Sie können schreiben

i = true and 5 or 3 

Ist das möglich?

Ich habe versucht, mit einer einfachen Konsolen C++ Projekt, aber beide Werte zurück als 1

#include "stdafx.h" 
#include <iostream> 

void main() 
{ 
    int test = (true && 5) || 1; 
    int test2 = (false && 6) || 2; 

    std::cout << "Test: " << test << std::endl << "Test2: " << test2; 
    while(true){} 
} 
+1

Welches Verhalten erwarten Sie hier? –

Antwort

3

C++ ist nicht Lua.

In Lua, true and 5 Ausdruck Ergebnisse in 5. So arbeitet Lua mit booleschen Ausdrücken.

Und so funktioniert C++ nicht mit booleschen Ausdrücken. In C++ führt ein boolescher Ausdruck zu einem booleschen Wert. Das heißt, entweder true oder false.

Wenn Sie zwischen zwei Werten auswählen möchten auf der Grundlage einer Bedingung, haben wir einen Operator für das:

int i = true ? 5 : 3; 

Wenn die Bedingung erfüllt ist, können Sie den Wert vor der : erhalten. Wenn es falsch ist, erhalten Sie den Wert nach :.

1

Ich vermute, Sie suchen int test = true ? 5 : 1;

1

Was Sie brauchen, ist ein bedingter Ausdruck:

int i = true ? 2 : 5; 

In diesem Fall i 2.

+0

Danke! Das war sehr hilfreich! – Drahsid

0

sein wird, wenn wir wirklich wollten, wie von C++ 11 (was uns das gibt and und or Schlüsselwörter als Synonyme für && und ||), konnten wir fast einen starken Arm der C++ Compiler in Compliance und bekommen es dies zu kompilieren:

int x = when_true(b) and 5 or 6; 

Um dies zu tun, wir einige Gerüste zur Verfügung zu stellen müssten:

#include <iostream> 

struct maybe_int { 
    bool cond; 
    int x; 

    operator int() const { return x; } 
}; 

int operator || (const maybe_int& l, int r) { 
    if (l.cond) return l.x; 
    return r; 
} 

struct when_true { 
    when_true(bool condition) 
    : _cond(condition) 
    {} 

    auto operator&&(int x) const { 
     return maybe_int { _cond, x }; 
    } 

    bool _cond; 

}; 


int main() 
{ 
    using namespace std; 

    auto b = false; 
    int x = when_true(b) and 5 or 6; 
    cout << x << endl; 
    return 0; 
} 

Mein Vorschlag, dass Sie bei der Arbeit diese Art der Sache nicht versuchen würde.

Verwandte Themen