Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Ποια είναι(ή καλύτερα γιατι υπάρχει) η διαφορά αυτών των δύο εκφράσεων:

 

x + (x > 5)?1:0;

x + ((x > 5)?1:0);

 

Παράδειγμα στον παρακάτω κώδικα:

#include <iostream>
using namespace std;

int main()
{
	int x = 10;
	
	int z = x + (x > 5)?1:0;
	int w = x + ((x > 5)?1:0);
	
	cout << "z = " << z << ",w = " << w << endl;
	
	x = 1;
	
	z = x + (x > 5)?1:0;
	w = x + ((x > 5)?1:0);
	
	cout << "z = " << z << ",w = " << w << endl;
	
	return 0;
}
Η έξοδος ειναι αυτή

z = 1,w = 11

z = 1,w = 1

 

Τι συμβαίνει;

Δημοσ.

Το δοκίμασες με gdb;

 

EDIT: Δεν το είχα παρατηρήσει αυτό. Δεν είμαι σε linux για να τρέξω gdb τώρα. Αν μπορείς δοκίμασέ το μία. Αν είναι θα το κοιτάξω κι εγώ αργότερα.

Δημοσ.

http://en.cppreference.com/w/cpp/language/operator_precedence

o operator ? έχει χαμηλότερη προτεραιότητα από τον + οπότε γίνεται πρώτο.

 

Σωστά. Σκάλωσα για κάποια στιγμή και έλεγα ότι αποκλείεται να γίνει η πρόσθεση με λογική τιμή (x<5) αλλά στη C/C++ δεν έχουμε boolean types. Τουλάχιστον δεν είναι strongly typed.

Δημοσ.

Σωστά. Σκάλωσα για κάποια στιγμή και έλεγα ότι αποκλείεται να γίνει η πρόσθεση με λογική τιμή (x<5) αλλά στη C/C++ δεν έχουμε boolean types. Τουλάχιστον δεν είναι strongly typed.

 

Boolean type υπάρχει και στη C++ (bool) και στην ISO C (_Bool).

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...